记录一下Springboot获取不到nacos配置中心的配置问题
由于项目使用的nacos老版本,存在风险bug, 需要将nacos升级至2.2.1及以上版本,版本升级完毕之后 启动项目发现项目开始报错,提示dynamic-datasource can not find primary datasource
但是我明明在nacos中已经配置了数据源,还会出现这样的问题, 下意识觉得可能是没有读取到nacos的配置文件
nacos配置中心主要是在这个NacosConfigService的这个类下面。该接口下面主要有一些获取配置,发布配置,增加监听器,删除配置,删除监听器等操作
首先在NacosPropertySourceBuilder下的loadNacosData方法中打上断点发现this.configService.getConfig返回的data为空, 侧面证明了确实没有读取到nacos中的配置信息
通过getConfig这个方法向下追踪,在NacosConfigService的getConfigInner方法里面,就是具体的拉取配置的实现,nacos首先是通过LocalConfigInfoProcessor.getFailover的方法获取本地的配置, 当本地配置返回空时才会去获取nacos客户端的配置,而this.worker.getServerConfig这个方法,就是进行获取远端的配置信息, 通过断点发现response的返回也是空的,那么我继续下沉追踪到getServerConfig中
下沉到queryConfig方法时发现了问题,通过ConfigQueryRequest.build方法生成的ConfigQueryRequest请求, 在返回时竟然返回ErrorCode:300, message 为 config data not exist, 这就是表示我传递三个参数, dataId, group, tenant 出现了问题
再回去nacos中反复检查确定dataId和group没问题的情况下, 那么就只剩下最后一个出现问题的参数了,那就是tenant, 在项目的配置文件bootstrap-dev.yml中, namespace输入的是命名空间的名称,而非命名空间的id,导入项目获取失败
最终通过修改namespace的值改名字为id, 成功启动, 问题不大,还是因为对nacos的掌握不熟练而导致的