欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

多个springboot项目如何使用一个外部共同的application.yml,

来源: javaer 分享于  点击 1337 次 点评:168

多个springboot项目如何使用一个外部共同的application.yml,


目录
  • 多个springboot项目使用一个外部共同的application.yml
  • springboot application.yml的一些加载规则
    • 1.application.yml与application.properties加载顺序问题
    • 2.src/test/resources/application.yml与src/main/resources/application.yml加载顺序问题
    • 3.多环境下的application.yml加载问题
  • 总结

    多个springboot项目使用一个外部共同的application.yml

    本来application.yml是放在spring boot项目的resource中。

    但是实际使用中,多个项目共同使用一个application.yml文件,所以就把application.yml配置文件放到了tomcat下,项目启动的时候指向tomcat就行

    代码如下:

    public class MyEnvironmentPostProcessor implements EnvironmentPostProcessor {
        @Override
        public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
            //tomcat路径
            String property = System.getProperty("catalina.home");
            String path = property + File.separator + "conf" + File.separator + "application.yml";
            //Springboot读取yml配置
            YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
            yaml.setResources(new FileSystemResource(path));
            MutablePropertySources propertySources = environment.getPropertySources();
            propertySources.addFirst(new PropertiesPropertySource("Config", yaml.getObject()));
        }
    }
    

    在resources下创建META-INF文件夹,然后创建spring.factories文件,代码为

    org.springframework.boot.env.EnvironmentPostProcessor=com.**.**.config.MyEnvironmentPostProcessor

    路径自定义,不要放到根目录下。

    以上配置即可多个项目使用同一个配置文件启动。

    springboot application.yml的一些加载规则

    SpringBoot是Java后端开发必须掌握的技术栈,而application.yml文件作为SpringBoot的核心配置,我们有必要去搞清楚约定的规则,提高开发效率。

    1.application.yml与application.properties加载顺序问题

    当src/main/resources目录下同时存在application.yml和application.properties的时候,两个配置文件中的内容都会被加载。

    加载顺序是:

    • 1.application.yml
    • 2.application.properties

    假设两个配置文件中存在相同的配置,那么后加载的将会覆盖掉先加载的,可以理解为Map的put操作。

    PS:

    该加载顺序规则同样适用于application-{profile}.yml和application-{profile}.yml,不过在项目实践中不建议将yml和properties混用,避免后期维护起来困难。

    2.src/test/resources/application.yml与src/main/resources/application.yml加载顺序问题

    通常在对SpringBoot应用做单元测试时,会在src/test/resources目录下的新增application.yml,因为测试的配置往往和应用的配置存在差异。

    当@SpringBootTest注解标注的类启动Spring上下文时会先加载src/main/resources/application.yml,然后加载src/test/resources目录下的application.yml,当key相同时后加载的配置将覆盖先加载的配置。

    3.多环境下的application.yml加载问题

    两种方式:

    • 单一application.yml配置方式
    spring:
      profiles:
        active: local # 启动哪个环境的配置,---用来设置便捷
    
    ---
    spring:
      config:
        activate:
          on-profile: local
    server:
      port: 8080
    
    ---
    spring:
      config:
        activate:
          on-profile: product
    server:
      port: 8081
    
    ---
    spring:
      config:
        activate:
          on-profile:  test
    server:
      port: 808
    
    • 多配置文件方式

    显然将多个环境的配置放在同一份配置文件中,随着后期配置项的不断增加,整个配置文件的会显得非常臃肿,而且本地配置文件和生产配置文件差异可能也较大,后期不同开发人员维护起来也比较痛苦。

    一个好的办法是将一个配置文件拆分成多个配置文件,通过这种方式,每个配置文件中写自己的配置,主配置文件中写清楚用哪一个配置文件就好了,当然如果有些配置项所有环境都一样,也可以将这些配置都维护在主配置文件中。 

    多环境配置文件的命名规则为:application-环境名.yml

    ### application.yml主配置文件
    spring:
      profiles:
        active: dev 
    

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持3672js教程。

    您可能感兴趣的文章:
    • SpringBoot中application.properties、application.yaml、application.yml区别
    • SpringBoot加载不出来application.yml文件的解决方法
    • SpringBoot+log4j2.xml使用application.yml属性值问题
    • springboot log4j2.xml如何读取application.yml中属性值
    • Springboot application.yml配置文件拆分方式
    相关栏目:

    用户点评