java中的接口是类吗
282
2022-10-18
Spring外部化配置的几种技巧分享
目录正文Envrionment 获取外部配置修改Spring默认配置文件名称Value注解配置来源外部化配置文件优先级问题Autowire注入ConfigurableEnvrionmentApplicationInitialiazer 配置总结
正文
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
publhttp://ic 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,
jViwT http:// @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外部化配置的资料请关注我们其它相关文章!
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~