笔者最近在魔改自己的组件项目,于是想到了引入Nacos来作为自己的配置中心,但是在写好相应的代码后出现了问题,后面会详细叙述
接下来先来介绍笔者的项目环境
以下是相应的pom文件配置:
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
2021.0.6.0
org.yaml
snakeyaml
1.30
为什么选用nacos2.5.1,因为官方文档介绍他是稳定生产版本,那么应该可以向下兼容。
为什么选用spring-cloud-starter-alibaba-nacos-config:2021.0.6.0,因为为了匹配笔者的springBoot版本。
当笔者编写完相应代码时,进行测试时,发现无法启动应用。相应的有主要两个报错。
ps:这两个报错不是一起出现的,笔者只是将他们合在一起讲解。
报错一:java.lang.IllegalStateException:Unable to load config data from nacos
报错二:DEBUG org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter - Application failed to start due to an exception org.springframework.cloud.commons.ConfigDataMissingEnvironmentPostProcessor$ImportException: No spring.config.import set
报错一的意思大概就是说:这个错误是 Spring Boot 在尝试加载 Nacos 配置时,无法识别配置文件的格式(即 file-extension
) ,或者没有正确指定配置源类型
笔者然后在bootstrap.yml文件这样配置
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
namespace: a00510c4-c973-4179-961e-dd500a1c350d
group: DEFAULT_GROUP
file-extension: yaml
主要是添加了file-extension: yaml,文件识别为yaml格式
笔者将maven进行clean + install之后还是不行,报错依然是报错一
报错二的意思大概就是Spring Boot 2.4 开始,引入了新的外部配置加载机制(ConfigData
),SpringBoot要显式的声明从哪里导入配置,比如nacos。
然后笔者在bootstrap.yml文件这样进行配置
spring:
config:
import: - nacos
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
namespace: a00510c4-c973-4179-961e-dd500a1c350d
group: DEFAULT_GROUP
file-extension: yaml
结果还是报错二
笔者由这两个报错联想到,这两个报错都有个共同点,就是无法识别配置源的信息,既然这样,那么我直接禁用检查,先让应用启动跑起来看看有没有其他报错不就行了吗?
按照上述思路,笔者打算一招就解决两个报错,试试就试试!!
bootstrap.yml如下:
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
namespace: a00510c4-c973-4179-961e-dd500a1c350d
group: DEFAULT_GROUP
file-extension: yaml
application.yml如下:
spring:
application:
name: dynamic-thread-pool-test-app
profiles:
active: dev
application-dev.yml如下:
server:
port: 8093
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
namespace: a00510c4-c973-4179-961e-dd500a1c350d
group: DEFAULT_GROUP
data-id: dynamic-thread-pool-test-app-dev.yaml
file-extension: yaml
import-check:
enabled: false
extension-configs:
- data-id: dynamic-thread-pool-test-app-dev.yaml
group: DEFAULT_GROUP
refresh: true
主要解决问题的点在于使用了import-check: enabled: false,禁用了检查。
笔者然后顺利了启动应用进行测试,应用的新功能都按照预期进行,没有其他bug。
笔者觉得应该是boot的版本和nacos的版本有点冲突导致的,或者是笔者还没有真正的找到问题所在,只能使用停止检查的手段,如果你也有这样的困惑,不妨也试试我的方法。也请有懂的佬来看看是怎么回事,评论区见。
这是笔者的一次报错解决,如果你看了这篇文章有收获可以点赞+关注+收藏,这是对笔者更新的最大鼓励!如果你有更多方案或者文章中有错漏之处,请在评论区提出帮助笔者勘误,祝你拿到更好的offer!