Nacos配置中心 命令行参数无法覆盖 远程配置

100 阅读1分钟

背景: 在做服务灰度部署和平滑升级的过程中,发现Dockerfile中的启动参数,无法覆盖掉远程配置中心的配置。

排查过程:
环境

spring-cloud-context 3.1.7 
spring-cloud-alibaba 2031.0.4.0

一直以为命令行的参数是优先级最高的,但是在使用Nacos的过程中发现并不是这样!

--spring.cloud.nacos.discovery.namespace=621f174c-7e08-4839-9704-0584a831d62d 
--spring.cloud.nacos.discovery.server-addr=127.0.0.1:8858 
--spring.cloud.nacos.config.namespace=621f174c-7e08-4839-9704-0584a831d62d 
--spring.cloud.nacos.config.server-addr=127.0.0.1:8858

上面的这几个参数可以从命令行覆盖,其他参数默认情况下配置中心的优先级是最高的! 观察项目启动时的日志,定位到加载配置文件的地方 org.springframework.cloud.bootstrap.config.PropertySourceBootstrapConfiguration#insertPropertySources image.png image.png 根据org.springframework.cloud.bootstrap.config.PropertySourceBootstrapProperties类中的注释发现overrideSystemProperties默认为true表示允许远程配置覆盖系统配置,打上断点后发现,这个属性只能在匹配置中心中配置! image.png

解决
原因已经找到了,解决就很简单了,只需要将spring.cloud.config.overrideSystemProperties=false添加到配置中心就可以了!

参考:解决命令行参数-D无法覆盖远程配置中心(nacos)问题_nacos 参数覆盖 -d-CSDN博客)