NACOS 配置中心 无法获取配置 报错Could not resolve placeholder

本文用于记录自己第一次解决bug的过程,尽量把一些在解决bug上的思路记录并分享与同路人。

本次解决了在SCA(spring cloud alibaba)上部署了Nacos的配置中心,想获取中心上配置了的参数,但是客户端(想通过nacos获取参数的服务)启动报错could not resolve placeholder的错。

想看知道直接造成bug的原因,可以直接拉到后面看结论,然后马上动手尝试,看看能不能解决问题。

*在左侧加了竖线的,表示我当时的一些思考以及思路历程

报错信息:

容器环境 top 容器环境无法获取nacosconfigmanager_解决bug


容器环境 top 容器环境无法获取nacosconfigmanager_容器环境 top_02

环境状态:

工具

版本

JKD

11

SPRINGCLOUD ALIBABA

2.1.0.RELEASE

NACOS CONFIG

2.1.0.RELEASE(界面显示1.2.0)

NACAOS配置中心名称

容器环境 top 容器环境无法获取nacosconfigmanager_解决bug_03


容器环境 top 容器环境无法获取nacosconfigmanager_容器环境 top_04

服务工程的配置

容器环境 top 容器环境无法获取nacosconfigmanager_容器环境 top_05

服务工程代码

容器环境 top 容器环境无法获取nacosconfigmanager_YAML_06

!!!开始debug解决错误

先看报错信息定位到哪一个类报错。

容器环境 top 容器环境无法获取nacosconfigmanager_配置文件_07

postProcessProperties 看文字大概推测就是bean构建好之后,想把properties的值注入进去,初步有一个猜想就是.properties的值肯定是存在一个地方,然后大概通过 propertiessource.get(key) 类似这样的方法把值获取到,然后再赋值到代码中的message

根据上面的思考想法,就在对应的代码行debug,然后一行行去F7看结果.根据debug varibles 查看变量那块,知道了一些变量名称,然后就可以根据这些变量名称做为关键字,从而可以快速定位

ps:我需要看的properties 名字是lagou.message 以及 获取数据值的源是NacosPropertySource(因为我认为我的值要从nacos那边取过来,NacosProperteySource应该就是我要找的类),那这样就可以快速debug停到这里,慢慢看代码值的变化。

容器环境 top 容器环境无法获取nacosconfigmanager_配置文件_08


对应运行时的变量值

容器环境 top 容器环境无法获取nacosconfigmanager_容器环境 top_09

通过变量值可以看到,当前的propertySource就是我需要的Nacaos,然后他的配置文件名称就是lagou-code-config.YAML,看像是我配置的名称,且是用我的配置文件拼接而成的(通过YAML大写推估)。

但是他的source的size是0,那表示这个lagou-code-config.YAML是空的。那两种情况要不就连接不上,要不就是找不到(名字不对),目前名字严格意思上来说,代码写lagou-code-config.yaml ,而nacaos配置中心的dataid是写lagou-code-config ,两者差了个YAML。可以考虑重新生成一个dataid是lagou-code-config-yaml的

新增一个配置中心文件

容器环境 top 容器环境无法获取nacosconfigmanager_解决bug_10

添加后,重新debug自己的项目

容器环境 top 容器环境无法获取nacosconfigmanager_解决bug_11

bingo!! 出来的,size不为0了,有数据且数据内容就是我自己添的othernews。

到此我的bug已经解决完了。

结论:dataid 的名字要与服务工程配置里面拼接的一模一样,包括文件后缀!才能访问到

这里在留一个坑给自己去再填充一下,加深对nacaos的源码理解跟加强自己debug阅读代码能力。

为啥最开始的lagou-code-config 的size为0,而lagou-code-config.yaml却不为0? nacaosProperty怎么设置数据到里面的.