NACOS 配置中心 无法获取配置 报错Could not resolve placeholder
本文用于记录自己第一次解决bug的过程,尽量把一些在解决bug上的思路记录并分享与同路人。
本次解决了在SCA(spring cloud alibaba)上部署了Nacos的配置中心,想获取中心上配置了的参数,但是客户端(想通过nacos获取参数的服务)启动报错could not resolve placeholder的错。
想看知道直接造成bug的原因,可以直接拉到后面看结论,然后马上动手尝试,看看能不能解决问题。
*在左侧加了竖线的,表示我当时的一些思考以及思路历程
报错信息:
环境状态:
工具 | 版本 |
JKD | 11 |
SPRINGCLOUD ALIBABA | 2.1.0.RELEASE |
NACOS CONFIG | 2.1.0.RELEASE(界面显示1.2.0) |
NACAOS配置中心名称
服务工程的配置
服务工程代码
!!!开始debug解决错误
先看报错信息定位到哪一个类报错。
postProcessProperties 看文字大概推测就是bean构建好之后,想把properties的值注入进去,初步有一个猜想就是.properties的值肯定是存在一个地方,然后大概通过 propertiessource.get(key) 类似这样的方法把值获取到,然后再赋值到代码中的message
根据上面的思考想法,就在对应的代码行debug,然后一行行去F7看结果.根据debug varibles 查看变量那块,知道了一些变量名称,然后就可以根据这些变量名称做为关键字,从而可以快速定位
ps:我需要看的properties 名字是lagou.message 以及 获取数据值的源是NacosPropertySource(因为我认为我的值要从nacos那边取过来,NacosProperteySource应该就是我要找的类),那这样就可以快速debug停到这里,慢慢看代码值的变化。
对应运行时的变量值
通过变量值可以看到,当前的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的
新增一个配置中心文件
添加后,重新debug自己的项目
bingo!! 出来的,size不为0了,有数据且数据内容就是我自己添的othernews。
到此我的bug已经解决完了。
结论:dataid 的名字要与服务工程配置里面拼接的一模一样,包括文件后缀!才能访问到
这里在留一个坑给自己去再填充一下,加深对nacaos的源码理解跟加强自己debug阅读代码能力。
为啥最开始的lagou-code-config 的size为0,而lagou-code-config.yaml却不为0? nacaosProperty怎么设置数据到里面的.