问题现象:
今天在项目中遇到一个问题:
Nacos中新增一个 sgccamapappserver-dev.yml 配置文件,然后让 Springboot 服务引用这个新的配置文件,但是失败了!!!启动服务后发现读取的还是原来的 sgccamapappserver.yml 配置文件!!!
问题分析:
这个问题其实是涉及到了nacos加载配置文件的顺序逻辑:
首先看一下服务的bootstrap.peoperties配置:
修改前,加载的nacos配置文件是 sgccamapappserver.yml:
修改后,加载的nacos配置文件是 sgccamapappserver-dev.yml:
那么为什么会加载失败呢?
其实问题就出现在微服务名称这里,可以看出是 sgccamapappserver:
导致 sgccamapappserver-dev.yml 加载失败的原因就是因为:
springboot项目默认会优先查询nacos中与微服务名称相同的配置;所以当nacos中存在 sgccamapappserver.yml 配置文件,则会直接加载这个配置,直接略过了下面这个配置:
还有一个因素,就是当配置中未指定环境,会导致它默认加载与 spring.application.name 属性值同名的nacos配置文件。
解决方法:
从问题分析可以得知要解决这个问题,其实很简单,那就是 指定环境。如:
我现在要加载的nacos配置是 sgccamapappserver-dev.yml
那就可以在 bootstrap.peoperties配置文件中添加如下配置,来指定环境:
最终:
亲测可用!