Spring Boot 2.0:初探配置文件

1.全局配置文件

Spring Boot使用了一个全局的配置文件application.properties,放在src/main/resources目录下或者类路径的/config下。Sping Boot的全局配置文件的作用是对一些默认配置的配置值进行修改。

1.1 自定义属性

application.properties提供自定义属性的支持,这样我们就可以把一些常量配置在这里:

config.name = four
config.age = 18

然后直接在要使用的地方通过注解@Value(value=” name)@Value(value= n a m e ” ) 、 @ V a l u e ( v a l u e = ” {age}”)就可以绑定到你想要的属性上面

@RestController
public class HelloController {
    @Value(value="${config.name}")
    String name;
    @Value("${config.age}")
    String age;
    @RequestMapping("/hello")
    public String hello() {
        return "hello !"+name+",age:"+age;
    }
}

我们启动工程输入http://localhost:8080 就可以看到:
spring
有时候属性太多了,一个个绑定到属性字段上太累,官方提倡绑定一个对象的bean,这里我们建一个ConfigBean.java类,顶部需要使用注解@ConfigurationProperties(prefix = “person”)来指明使用哪个。

@ConfigurationProperties(prefix = "config")
public class Config {
    private String name;
    private String age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }
}

这里配置完还需要在spring Boot入口类加上@EnableConfigurationProperties并指明要加载哪个bean

@EnableConfigurationProperties({Config.class})
@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

最后在Controller中引用

@RestController
public class HelloController2 {
    @Autowired
    Config conifg;
    @RequestMapping("/hello2")
    public String hello() {
        return "hello !"+conifg.getName();
    }
}
1.2 参数间引用

在application.properties中的各个参数之间也可以直接引用来使用,就像下面的设置:

config.name = four
config.age = 18
config.lc=name:${config.name},age${config.age}

使用:

@RestController
public class HelloController3 {

    @Value("${config.lc}")
    String person;
    @RequestMapping("/hello3")
    public String hello() {
        return "hello !"+person;
    }
}

2. 使用自定义配置文件

有时候我们不希望把所有配置都放在application.properties里面,这时候我们可以另外定义一个,这里我明取名为myconfig.properties,路径跟也放在src/main/resources下面。

com.myconfig.weight = 120
com.myconfig.length = 28

我们新建一个bean类,如下:

@Configuration
@ConfigurationProperties(prefix = "com.myconfig") 
@PropertySource("classpath:test.properties")
public class MyConfig {
    private String weight;
    private String length;
    // 省略getter和setter
}

之后就可以使用了,注意这里没有@EnableConfigurationProperties({Config.class})注解,因为@Configuration会把它看做一个配置类,自动将该类加载的容器中。

如果你使用的是1.5以前的版本,那么可以通过locations指定properties文件的位置,这样

@ConfigurationProperties(prefix = "com.myconfig",locations="classpath:myconfig.properties")

3.Profile-多环境配置

当应用程序需要部署到不同运行环境时,一些配置细节通常会有所不同,最简单的比如日志,生产日志会将日志级别设置为WARN或更高级别,并将日志写入日志文件,而开发的时候需要日志级别为DEBUG,日志输出到控制台即可。
如果按照以前的做法,就是每次发布的时候替换掉配置文件,这样太麻烦了,Spring Boot的Profile就给我们提供了解决方案,命令带上参数就搞定。

这里我们来模拟一下,只是简单的修改端口来测试
在Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应你的环境标识,比如:

  • application-dev.properties:开发环境
  • application-prod.properties:生产环境
    想要使用对应的环境,只需要在application.properties中使用spring.profiles.active属性来设置,值对应上面提到的{profile},这里就是指dev、prod这2个。两个配置文件中分别做一下配置:

    myserver.port = 888
    
    myserver.port = 11111
    

然后在启动的时候编辑启动选项并指定:
spring
就会有不同的结果。

你可能感兴趣的:(Spring系列)