type
status
date
slug
summary
tags
category
icon
password
又到了一年一度的升级版本的时候,每次都会遇到各种坑,这次启动时,Nacos配置获取不到了。找了半天百度,最终会还是回归查询Github的issue。
📝 问题原因
分别跟了一下 SCA 2023.0.1.2 和 SCA 2023.0.1.3 的代码,发现核心问题出在
NacosPropertySourceLocator
上。NacosPropertySourceLocator
主要用来处理 Nacos Config 相关配置,以保证 NacosConfigProperites 可以正确的读取到值。SCA 2023.0.1.2
在 SCA 2023.0.1.2 时,
NacosPropertySourceLocator
是在 NacosConfigBootstrapConfiguration
中进行的配置。NacosConfigBootstrapConfiguration
类,就是大多数微服务使用的 Bootstrap.yml。在服务刚启动的时候,就会读取 Bootstrap.yml 中 Nacos Config 相关的配置。同时,
NacosPropertySourceLocator
中还有两个方法,在启动时候会对 "shared-configs" 和 "extension-configs" 两个属性进行处理,以保证准确读取到 Nacos 配置中心的配置。SCA 2023.0.1.3
在 SCA 2023.0.1.3 中,大部分代码被移动到了
spring-alibaba-nacos-config
模块中,仅有 NacosPropertySourceLocator
被留在了原模块中。 而且 NacosPropertySourceLocator
被从 NacosConfigBootstrapConfiguration
配置中移出。这样就导致,在 Bootstrap 模式下,
NacosPropertySourceLocator
被配置时机出现了问题。服务刚启动的时候,NacosPropertySourceLocator
根本没有被注入,这就导致 NacosConfigProperties 中主要的属性 "shared-configs" 和 "extension-configs" 是空值,所以就出现无法读取到Nacos 配置中配置的问题。另一方面,2023.0.1.3 中
NacosPropertySourceLocator
类中的 loadSharedConfiguration
和 loadExtConfiguration
两个方法代码也被删除了。即使启动时注入的时机没有问题, "shared-configs" 和 "extension-configs" 也会是空值🤗 结论
需要使用Spring 的config import 方式,例如:
可以配置多个:
📎 参考文章
- 作者:吕行者
- 链接:https://www.lvy.life/article/2024/12/23/1651f2f0-5182-80d3-854a-fc71a82233b6
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。