springboot没有按默认顺序读取配置文件问题

众所周知 springboot 读取配置的默认顺序为

  1. 当前项目目录下的一个/config子目录
  2. 当前项目目录
  3. 项目的resources即一个classpath下的/config包
  4. 项目的resources即classpath根路径(root)

但是最近遇到个奇葩的问题 看起来 springboot 并没有按这个顺序来读取配置

事情是这样的:

我在 jar 包同级目录有application.yml文件,classpath 下有application.yml,application-pro.yml这两个文件,项目启动时读取了classpath 下的application-pro.yml 这让我小小的眼睛充满了大大的疑惑

为什么会这样:

首先 两个地方的application.yml是不一样的 jar 包同级目录的application.yml并没有配置profiles:active: pro,而 classpath 下的application.yml有这个配置

按照我的理解,项目启动时首先会读取 jar 包同级的application.yml发现没有配置profiles:active就会默认是有 jar 包同级目录的application.yml,但事实并不是这样

实际运行流程:

项目启动读取配置发现 jar 包同级的application.yml没有配置profiles:active就接着往下找找到 classpath 下的application.yml发现配置了profiles:active: pro,于是就开始找application-pro.yml,由于 jar 包同级目录并没有application-pro.yml文件,所以就使用了 classpath 下的application-pro.yml

这导致了我认为 springboot 没有按照默认顺序读取配置文件

结论:

springboot 读取配置文件的默认顺序不是按照文件级别来读取的,而是按照配置项来的,这个文件没有就找下一个文件

会先找profiles:active确认 activeprofile 之后再一层层找配置

比如port 配置activeprofile已经确认为 pro 了之后会先找 jar 包同级的 application-pro.yml port 配置 如果没有 则会使用 classpath 下的application-pro.yml 的 port 配置 如果再没有 会使用application.yml的 port 配置

 

教训:

最好大家都别靠默认读取配置顺序来指定配置文件,如果想要配置文件分离最好还是打包时排除配置文件

比如

    <resources>
         <resource>
            <directory>src/main/resources</directory>
<!--            <includes>-->
<!--               <include>ConfigSource.properties</include>-->
<!--            </includes>-->
            <excludes>
               <exclude></exclude>
            </excludes>
         </resource>
      </resources>

 

使用默认顺序读取配置文件可能会有不确定因素

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值