您的位置:首页技术文章
文章详情页

Spring外部化配置的几种技巧分享

【字号: 日期:2023-07-08 13:02:09浏览:6作者:猪猪
目录正文Envrionment 获取外部配置修改Spring默认配置文件名称Value注解配置来源外部化配置文件优先级问题Autowire注入ConfigurableEnvrionmentApplicationInitialiazer 配置总结正文Envrionment 获取外部配置

@Log4j2@SpringBootApplicationpublic 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=appValue注解配置来源

配置文件

@BeanApplicationRunner 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);}@Autowiredvoid 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外部化配置的资料请关注好吧啦网其它相关文章!

标签: Spring
相关文章: