背景: 在做服务灰度部署和平滑升级的过程中,发现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
根据
org.springframework.cloud.bootstrap.config.PropertySourceBootstrapProperties
类中的注释发现overrideSystemProperties
默认为true表示允许远程配置覆盖系统配置,打上断点后发现,这个属性只能在匹配置中心中配置!
解决
原因已经找到了,解决就很简单了,只需要将spring.cloud.config.overrideSystemProperties=false
添加到配置中心就可以了!