SpringBoot加载application.properties配置文件的坑

事情的起因是这样的,一次,本人在现场升级程序,升级完成后进行测试,结果接口调用都报了这么个错误:

 大概意思是https接口需要证书校验,这就奇怪了,项目启动加载的是包外的application.properties配置文件,配置文件里没有配置使用https啊。本人马上检查了下包内的application.properties配置文件,发现包内确实配置了https相关的配置项:

明明包外的配置文件优先级高于包内的,为啥包内的一部分配置项起作用了呢,我们了解的配置文件优先级是这样的:

这是为啥呢?后来才了解到除了高优先级覆盖低优先级外,还有一条重要的规则:如有不同内容,高优先级和低优先级形成互补配置。这下才恍然大悟,我包外的配置文件里把https相关的配置项注释掉了,相当于没有这个配置项,但是包内的配置文件有,根据互补原则,包内的这几个配置项起作用了。

问题原因找到了,如何解决呢?要不我把包内的那几个配置项也注释掉,重新打个包?其实不必这么麻烦,通过-Dspring.config.location命令直接指定包外的配置文件就可以了,试了下,果然没有问题了。问题虽然解决了,但是还有些疑问,为啥指定包外的配置文件后就不存在互补情况了呢?通过阅读springboot相关源码,找到了答案:

大概意思是:如果-Dspring.config.location指定了配置文件,则只加载指定的那一个配置文件,如果没有专门指定配置文件则遍历包外、包内相关的配置文件,按照高优先级覆盖低优先级和互补原则进行加载。

弄明白这些问题后,实地部署项目的时候,保险起见还是通过-Dspring.config.location命令直接指定加载的配置文件比较好,避免出现一些不必要的麻烦。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值