Spring Boot使用了一个全局的配置文件application.properties,放在src/main/resources目录下或者类路径的/config下。Sping Boot的全局配置文件的作用是对一些默认配置的配置值进行修改。
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 就可以看到:
有时候属性太多了,一个个绑定到属性字段上太累,官方提倡绑定一个对象的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();
}
}
在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;
}
}
有时候我们不希望把所有配置都放在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")
当应用程序需要部署到不同运行环境时,一些配置细节通常会有所不同,最简单的比如日志,生产日志会将日志级别设置为WARN或更高级别,并将日志写入日志文件,而开发的时候需要日志级别为DEBUG,日志输出到控制台即可。
如果按照以前的做法,就是每次发布的时候替换掉配置文件,这样太麻烦了,Spring Boot的Profile就给我们提供了解决方案,命令带上参数就搞定。
这里我们来模拟一下,只是简单的修改端口来测试
在Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应你的环境标识,比如:
application-prod.properties:生产环境
想要使用对应的环境,只需要在application.properties中使用spring.profiles.active属性来设置,值对应上面提到的{profile},这里就是指dev、prod这2个。两个配置文件中分别做一下配置:
myserver.port = 888
myserver.port = 11111