Spring外部化配置的几种技巧分享
作者:johnwonder
在油管上看了龙之春的一个Spring tips 视频,讲述Spring外部化配置的几种技巧,收获颇多,想拿出来给大家分享下。对spring感兴趣的朋友可以了解下本文
正文
Envrionment 获取外部配置
@Log4j2
@SpringBootApplication
public class ConfigurationApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigurationApplication.class, args);
}
@Bean
ApplicationRunner applicationRunner(Environment environment){
return args -> {
log.info("user.name : {}",environment.getProperty("user.name"));
};
}
}
修改Spring默认配置文件名称
启动程序参数中加入如下配置:
--spring.config.name=app
Value注解配置来源
配置文件
@Bean
ApplicationRunner applicationRunner(Environment environment,
@Value("${greeting.message:hello boy}") String message){
return args -> {
log.info("from application.properties user.name : {}",environment.getProperty("user.name"));
log.info("from application.properties greeting.message : {}",message);
};
}
默认值
value注解通过冒号来配置默认值:
@Value("${greeting.message:hello boy}")
获取环境变量值
获取程序参数值
外部化配置文件优先级问题
如果有application.properties在springboot 启动jar包同一目录,会优先读取这个文件中的配置。
Autowire注入ConfigurableEnvrionment
public static void main(String[] args) {
new SpringApplicationBuilder()
.sources(ConfigurationApplication.class)
.run(args);
}
@Autowired
void getConfigurableEnvrionment(ConfigurableEnvironment environment) {
environment.getPropertySources().addLast(new MyPropertySource());
}
ApplicationInitialiazer 配置
public static void main(String[] args) {
new SpringApplicationBuilder()
.sources(ConfigurationApplication.class)
.initializers(applicationContext ->
applicationContext.getEnvironment().getPropertySources().addLast(new MyPropertySource()))
.run(args);
}
static class MyPropertySource extends PropertySource<String>{
public MyPropertySource() {
super("myproperty");
}
@Override
public Object getProperty(String name) {
if(name.equalsIgnoreCase("author-name")){
return "john";
}
return null;
}
}
然后通过@Value注解注入获取author-name:
@Bean
ApplicationRunner applicationRunner(Environment environment,
@Value("${greeting.message:hello boy}") String message,
@Value("${author-name}") String name){
return args -> {
log.info("from application.properties user.name : {}",environment.getProperty("user.name"));
log.info("from application.properties author.name : {}",name);
};
}
总结
Spring的Environment抽象有很多值得学习的地方,期待下一期每日小技巧。
以上就是Spring外部化配置的几种技巧分享的详细内容,更多关于Spring外部化配置的资料请关注脚本之家其它相关文章!
