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外部化配置的资料请关注179885.Com其它相关文章!

猜你在找的Spring外部化配置的几种技巧分享相关文章

代码生成器,可以有效减少编写重复代码,快速实现简单的业务逻辑,也能让我们的代码保持一致。那目前,我们看到的代码生成器,大部分是基于velocity引擎模板生成的,接下来我
今天给大家带来的是关于Java的相关知识总结,文章围绕着JAVA正则表达式及字符串的替换与分解展开,文中有非常详细的介绍及代码示例,需求的大佬可以参考下
了SpringBoot与Postman实现REST模拟请求的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
我们知道Java是一个面相对象的编程语言,基本类型并不具有对象的性质,为了让基本类型也具有对象的特征,就出现了包装类型,它相当于将基本类型“包装起来”,使得它具有了
要实现自定义的xml配置,需要有两个默认spring配置文件来支持。一个是spring.schemas,一个是spring.handlers,前者是为了验证你自定义的xml配置文件是否符合你的格式
ArrayList基于动态数组实现,在添加和删除的时候存在扩容和缩容这样重新规划数组大小的机制。在ArrayList中,维护Object[] elementData数组来管理元素,但是ArrayList
该教程使用idea开发工具初始化javaweb项目,该运行在tomcat服务器上通过配置项目环境变量保证tomcat正常启动,具体操作配置教程参考下本文
SpringBoot 在项目启动的时候封装了创建对象的方法,无需我们手动配置,接下来通过本文给大家介绍SpringBoot 自动配置原理解析及源码展示,感兴趣的朋友一起看看吧
关于Java并发的通信机制是基于共享内存实现的,线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信,这对程序员是透明的,我们需要理解其工作机制,以防
IDEA编译的时候乱码,Build Output提示信息乱码,本文就详细的介绍一下解决方法,有需要的同学可以了解一下
Cookies是 web站点放置到你的硬盘上的程序。它们驻留在你的计算机上收集关于你在因特网上所做的一切事情的信息,并且 web站点可以在任何时候读取到Cookies收集到的
本文给大家介绍Mybatis结果集映射一对多简单入门教程,包括搭建数据库环境的过程,idea搭建maven项目的代码详解,本文通过实例代码给大家介绍的非常详细,需要的朋友参考