解决命令行参数-D无法覆盖远程配置中心(nacos)问题

本文介绍了一次运维过程中遇到的问题——在Kubernetes环境中无法使用-D命令行参数覆盖Nacos配置中心的设置。文章详细分析了配置加载的机制,并提供了两种解决方案:一是调整远程配置中心加载顺序;二是避免将需要被覆盖的配置放入远程配置中心。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:今天运维在搭建k8s环境时反馈无法通过-D命令行参数修改参数配置,经排查,发现该配置位于nacos配置中心中。经验证,凡nacos配置中心配置参数均无法通过-D命令行改写。

排查过程:认知中springboot项目优先级-D命令行参数是最高的,但此次验证相当打脸。网上查阅相关文档
文档一
并调试本地源码发现所有配置均存储在MutablePropertySources的propertySourceList中,配置优先级与对象在list中索引息息相关。
经查,EnableConfigurationProperties对象insertPropertySources方法中在这里插入图片描述
该处判断直接影响远程配置中心文件order。
该配置通过PropertySourceBootstrapProperties对象加载。
此时,问题豁然开朗,我们只需使该方法判断为true,则将修改nacos配置序号,使之采用addLast加载而非addFirst,从而实现命令行参数优先级大于远程配置中心。

修改方案
在远程配置中心添加:

spring.cloud.config.allowOverride=true
spring.cloud.config.overrideNone=true
spring.cloud.config.overrideSystemProperties=false

(该方案直接修改了nacos中所有配置优先级,使之从first变为last,可能存在风险,请慎用!)

另:有一种更简单的解决方案,即需要通过-D命令行修改配置的参数请不要配置在远程配置中心,若已经配置,请删除即可

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值