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

 更新时间:2024年05月07日 16:06:13   作者:LLZYHHH  
这篇文章主要介绍了多个springboot项目如何使用一个外部共同的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 

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 详解Java设计模式之职责链模式

    详解Java设计模式之职责链模式

    责任链模式是一种行为设计模式,使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,文中通过代码示例给大家介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • Mybatis SqlSessionFactory与SqlSession详细讲解

    Mybatis SqlSessionFactory与SqlSession详细讲解

    SqlSessionFactory是MyBatis的核心类之一,其最重要的功能就是提供创建MyBatis的核心接口SqlSession,所以我们需要先创建SqlSessionFactory,为此我们需要提供配置文件和相关的参数
    2022-11-11
  • 快速上手Java单元测试框架JUnit5

    快速上手Java单元测试框架JUnit5

    今天给大家带来的是关于Java单元测试的相关知识,文章围绕着Java单元测试框架JUnit5展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • java中的BlockingQueue(阻塞队列)解析

    java中的BlockingQueue(阻塞队列)解析

    这篇文章主要介绍了java中的BlockingQueue阻塞队列解析,阻塞队列是一个支持两个附加操作的队列,这两个附加的操作是,在队列为空时,获取元素的线程会等待队列变为非空,需要的朋友可以参考下
    2023-12-12
  • SpringMVC多个文件上传及上传后立即显示图片功能

    SpringMVC多个文件上传及上传后立即显示图片功能

    这篇文章主要介绍了SpringMVC多个文件上传及上传后立即显示图片功能,非常不错,具有参考借鉴价值功能,需要的朋友可以参考下
    2017-10-10
  • Java递归实现斐波那契数列

    Java递归实现斐波那契数列

    这篇文章主要为大家详细介绍了Java递归实现斐波那契数列,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • 解决IDEA2020 创建maven项目没有src/main/java目录和webapp目录问题

    解决IDEA2020 创建maven项目没有src/main/java目录和webapp目录问题

    这篇文章主要介绍了IDEA2020 创建maven项目没有src/main/java目录和webapp目录问题解决方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • hadoop序列化实现案例代码

    hadoop序列化实现案例代码

    序列化想必大家都很熟悉了,对象在进行网络传输过程中,需要序列化之后才能传输到客户端,或者客户端的数据序列化之后送达到服务端,本文将为大家介绍Hadoop如何实现序列化,需要的可以参考一下
    2022-01-01
  • Java利用jenkins做项目的自动化部署

    Java利用jenkins做项目的自动化部署

    这篇文章主要介绍了Java利用jenkins做项目的自动化部署,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • 论java如何通过反射获得方法真实参数名及扩展研究

    论java如何通过反射获得方法真实参数名及扩展研究

    这篇文章主要为大家介绍了java如何通过反射获得方法的真实参数名以及扩展研究,有需要的朋友可以借鉴参考下,希望能够有所帮助祝大家多多进步早日升职加薪
    2022-01-01

最新评论