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

目录正文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=app

Value注解配置来源

配置文件

@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外部化配置的几种技巧分享

相关文章:

你感兴趣的文章:

标签云: