springboot支持自定义属性配置及自定义文件配置。主要通过@PropertySource、@ConfigurationProperties两个注解来实现。
在application.properties文件中加入以下内容:
wk.activeName = dev
然后在bean中可以使用@ConfigurationProperties注解直接注入值:
@RestController
@ConfigurationProperties(prefix = "wk")
public class ApplicationActiveController {
public String getActiveName() {
return activeName;
}
public void setActiveName(String activeName) {
this.activeName = activeName;
}
private String activeName;
@GetMapping("/application/active")
public String applicationActiveName(){
System.out.println(activeName);
return activeName;
}
}
访问http://localhost:8080/application/active,可以得到我们在配置文件中设置的值。这里需要注意的是,需要从配置文件中读取的值需要有set方法,不然无法赋值。
我们再新建一个application-run.properties文件,里面加入以下内容:
wk.activeName = run
然后使用@PropertySource注解来加载配置文件:
@RestController
@PropertySource("classpath:config/application-run.properties")
@ConfigurationProperties(prefix = "wk")
public class ApplicationActiveController {
public String getActiveName() {
return activeName;
}
public void setActiveName(String activeName) {
this.activeName = activeName;
}
private String activeName;
@GetMapping("/application/active")
public String applicationActiveName(){
System.out.println(activeName);
return activeName;
}
}
访问http://localhost:8080/application/active,我们会发现结果还是dev,结果错误;去掉application.properties中的相应字段,再次访问,结果为run,正确。由此可以发现如果一个值在application.properties中存在,那么就会覆盖其他配置文件的属性。
在我们平常开发中,经常是开发是一套数据库,测试一套数据库,线上又是另外一套数据库,这个时候就需要修改相应的数据库配置,spring中有profile注解来实现,springboot则提供了一个叫spring.profiles.active的属性来实现,根据它的值来加载不同的配置文件,相应配置文件的值为application-{profile}.properties,这个application前缀不能变,profile的值为spring.profile.active的值。
例如在application.properties加入:
spring.profiles.active=run
那么在加载配置的时候,除了application.properties中的属性外,还会加载application-run.properties配置文件的值。注意:application.properties的中如果与application-run.properties存在相同值,则会取application.properties中的值。
如果只是这样,那么每次在不同环境中运行时,我们还要修改application.properties中的spring.profiles.active的值,依旧很麻烦。只时候我们可以通过外部命令来引导,及使用springboot启动时的命令行参数来做到。
例如我们springboot项目最后打包的jar叫test.jar,我们需要在启动时采用运行环境配置即application-run.properties的配置参数,则命令为:
java -jar test.jar --spring.profiles.active=run
在IDEA中调试项目时可以直接在运行配置中配置相应active.profile参数,如图为使用开发配置参数application-dev.properties。