环境:
本地nacos服务已启动,可以正常登录web管理界面

pom引入也OK

配置文件
bootstrap.yml

application.yml

代码
@RestController
@Slf4j
@RefreshScope
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo(){
return configInfo;
}
}
nacos
添加dataip 命名规范为
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}的配置文件nacos-config-client-dev.yml
问题现象:
2021-10-05 14:23:24.425 WARN 20700 --- [ restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scopedTarget.configClientController': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'config.info' in value "${config.info}"
启动后报错,无法获取到controller中通过@value注入的配置config.info
解决问题:
考虑到可能是代码和配置都没什么问题,把思路放在nacos配置中,重复多次的修改配置文件中的格式问题,包括再三的检查dataid的命名规范,最终
spring.cloud.config.file-extension:yaml
问题出在这里。
刚开始的dataid不包含后缀,文件名为:nacos-config-client-dev
修改后为:nacos-config-client-dev.yaml
期间修改过为后缀yml,无效
所以最终总结:
如果file-extension配置为yaml,那么在nacos新建配置文件时格式选择各yaml,dataid后缀也要带上,一定要和项目配置文件中的保持一致。
至于为什么别人的nacos中配置后缀为yml 而项目配置中为yaml为什么就可以正常获取配置,我就不得而知了。
以上就是问题描述和解决过程,希望对正在尝试学习nacos的朋友有所帮助。算是一个小坑吧
更新:
尝试了修改file-extension的配置,改为yml,在nacos中添加配置文件,dataid的后缀为yml,nacos配置格式为yaml 也是可以读取到配置的,所以说file-extension和dataid的后缀要保持一致。
如果以上还不能解决你的问题,尝试检查一下项目配置文件里的group和namespace也要与nacos里的配置保持一致。这里就不再做拓展了。
本文记录了一次在使用Nacos作为配置中心时遇到的问题,即启动应用后无法从Nacos获取配置,导致Bean创建失败。问题关键在于dataid的命名规范,需包含配置文件的后缀,并且与`spring.cloud.nacos.config.file-extension`配置保持一致。解决方案是确保dataid后缀为`.yaml`或`.yml`,并且在Nacos中创建对应的配置文件。同时,提醒读者检查group和namespace的一致性,以确保配置能正确加载。
1487





