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

 更新时间:2021年06月21日 14:10:41   作者: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外部化配置的资料请关注脚本之家其它相关文章!

相关文章

  • Java常用类String的面试题汇总(java面试题)

    Java常用类String的面试题汇总(java面试题)

    这篇文章主要介绍了Java常用类String的面试题汇总,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-06-06
  • 浅谈sql_@SelectProvider及使用注意说明

    浅谈sql_@SelectProvider及使用注意说明

    这篇文章主要介绍了sql_@SelectProvider及使用注意说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • spring boot整合spring-kafka实现发送接收消息实例代码

    spring boot整合spring-kafka实现发送接收消息实例代码

    这篇文章主要给大家介绍了关于spring-boot整合spring-kafka实现发送接收消息的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来看看吧。
    2017-06-06
  • Java中的多态用法实例分析

    Java中的多态用法实例分析

    这篇文章主要介绍了Java中的多态用法,较为详细的分析了java中多态的概念与相关的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • new出来的对象中无法使用@autowired进行对象bean注入问题

    new出来的对象中无法使用@autowired进行对象bean注入问题

    这篇文章主要介绍了基于new出来的对象中无法使用@autowired进行对象bean注入问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • 详解Java设计模式之抽象工厂模式

    详解Java设计模式之抽象工厂模式

    设计模式是软件设计中的一种常见方法,通过定义一系列通用的解决方案,来解决常见的软件设计问题,其中,抽象工厂模式是一种非常常见的设计模式,文中有详细的代码示例供大家参考,感兴趣的同学可以借鉴阅读
    2023-05-05
  • Java多线程下解决资源竞争的7种方法详解

    Java多线程下解决资源竞争的7种方法详解

    这篇文章主要介绍了Java多线程下解决资源竞争的7种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • 从内存地址解析Java的static关键字的作用

    从内存地址解析Java的static关键字的作用

    这篇文章主要介绍了从内存地址解析Java的static关键字的作用,包括静态成员变量和静态方法等重要内容,需要的朋友可以参考下
    2015-10-10
  • java实现带有背景图片的窗体

    java实现带有背景图片的窗体

    这篇文章主要为大家详细介绍了java实现带有背景图片的窗体,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • 通过第三方接口发送短信验证码/短信通知(推荐)

    通过第三方接口发送短信验证码/短信通知(推荐)

    这篇文章主要介绍了通过第三方接口发送短信验证码/短信通知(推荐)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-08-08

最新评论