使用Nacos时遇到自动刷新功能(@NacosValue的autoRefreshed)无法工作的问题:运行环境使用的是nacos-spring-context-1.1.1.jar版本,问题在1.1.2版本中依然存在。配置变动后,有些配置不能自动刷新,尤其是含特殊字符'$'的配置项。而且这个问题只在首次变动时出现,之后的变动会误判为已成功刷新,影响了部分配置项的自动刷新功能。
问题复现步骤如下:
设置并监听Nacos的配置项。
变更配置值后调用特定接口来刷新。
检查发现有些配置项并没有刷新成功。
根据您的描述,问题可能出在占位符替换时校验$后面字符的规则上。您可以尝试修改这个规则,以允许$后面是{或者数字1~9的情况。具体操作如下:
if (!key.endsWith("${") && !key.endsWith("#{")) {
continue;
}
if (!key.endsWith("${") && !key.endsWith("#{") && !key.endsWith("[0-9]")) {
continue;
}
这样修改后,当$后面是{或者数字1~9时,配置条目应该可以正常刷新了。希望这对您有所帮助!
这个问题看起来像是Nacos的一个已知问题,可能是由于Nacos在处理带有特殊字符(如$)的配置值时的解析错误导致的。这个问题已经在Nacos的GitHub仓库中被报告,并且已经有人提出了修复方案。
你可以查看这个issue:https://github.com/alibaba/nacos/issues/1025
在这个issue中,有人提供了一个临时的解决方案,那就是在配置值中使用双引号代替单引号。例如,将配置值从 demoConfigItem1={"password":"(.password):|=(?!ENC[(][a-zA-Z0-9]+[)])(?![$][{].+[}])(.+)"}
改为 demoConfigItem1={"password":"(.password):|=(?!ENC[(][a-zA-Z0-9]+[)])(?![$][{].+[}])(.+)"}
。
然而,这只是一个临时的解决方案,你仍然需要等待Nacos团队修复这个问题。你可以关注这个issue,以便在问题解决后得到通知。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。