最近碰到一个有意思的问题,本人被公司分配到一个新的项目上,正好处于框架整合Nacos 配置中心的阶段,因为刚学习完,自信心异常膨胀。突然又遇到问题,导致信心崩盘,随后找到问题,快速又一次建立膨胀的信心。
叙述问题,目前涉及开发环境和测试环境。首先看一下项目的配置文件。
这个是我bootstrap.yml的信息
再看一下我的test的配置文件
这里是我的服务器Nacos的命名空间
当我打包发布到测试环境之后,我发现程序读取的Nacos的配置中心,文件是aa-aa命名空间的配置文件。具体怎么发现,是因为, 我在xx-xx空间下加了几个自定义的配置信息,没有在aa-aa空间下加入自定义配置。在程序中通过@Value注解读取,因为读取到配置中心中没有配置对应的信息,所以导致jar包运行失败。
问题叙述完毕。
解决问题思路:
1、检查jar包中的配置文件是不是在bootstrap.yml 文件下指定错了
spring:
profiles:
active: test
可以通过vim xxx.jar包查看。我这边发现bootstrap.yml 没有指定错误。
2、继续检查jar包中bootstrap-test.yml 是不是命名空间 server-addr 和namespace 配置错误。
server-addr: xx.xx.xx.xx:8848 #Nacos服务注册中心地址
namespace: xx-xx
显然发现不是这个问题。
3、最后反复思考,根据请教老师提供的资料。突然想到是不是因为优先级问题导致的。
因为,我这边配置是没有问题的。
发现代码里没有任何的配置,紧接着继续思考,突然想到,在环境中启动jar包,是通过.sh文件启动的。
是不是因为启动文件配置中指定了,配置文件信息。从而覆盖掉了,我配置文件中的配置信息。结果发现,问题果然是这样,在.sh文件启动命令中
--spring.cloud.nacos.config.server-addr=xx.xx.xx.xx:8848 \
--spring.cloud.nacos.config.namespace=aa-aa \
发现有这两个命令。
自此疑惑真相大白。
来一个槽点:
关于配置文件的优先级覆盖流程作者还在整理实验。希望后续我能整理出来。