SpringCloud整合NacosConfig异常:create config service error! (NacosException: null)

在使用nacos作为配置中心整合springcloud时,项目启动会报错,导致nacos的配置功能无法启用
最后解决办法是将nacos的配置写在bootstrap.properties内
(参考:Nacos整合SpringCloud入门示例)
分析过程如下:

异常信息:

Sample
2019-03-13 19:32:07.019 ERROR 19543 --- [           main] o.s.c.a.nacos.NacosConfigProperties      : create config service error!properties=NacosConfigProperties{serverAddr='null', encode='null', group='DEFAULT_GROUP', sharedDataids='null', refreshableDataids='null', prefix='null', fileExtension='properties', timeout=3000, endpoint='null', namespace='null', accessKey='null', secretKey='null', contextPath='null', clusterName='null', name='null', activeProfiles=[]},e=,
com.alibaba.nacos.api.exception.NacosException: null
    at com.alibaba.nacos.api.config.ConfigFactory.createConfigService(ConfigFactory.java:45) ~[nacos-api-0.6.2.jar:na]
    at com.alibaba.nacos.api.NacosFactory.createConfigService(NacosFactory.java:41) ~[nacos-api-0.6.2.jar:na]
    at org.springframework.cloud.alibaba.nacos.NacosConfigProperties.configServiceInstance(NacosConfigProperties.java:347) ~[spring-cloud-alibaba-nacos-config-0.2.1.RELEASE.jar:0.2.1.RELEASE]
    at org.springframework.cloud.alibaba.nacos.client.NacosPropertySourceLocator.locate(NacosPropertySourceLocator.java:63) [spring-cloud-alibaba-nacos-config-0.2.1.RELEASE.jar:0.2.1.RELEASE]
    at org.springframework.cloud.bootstrap.config.PropertySourceBootstrapConfiguration.initialize(PropertySourceBootstrapConfiguration.java:94) [spring-cloud-context-2.0.2.RELEASE.jar:2.0.2.RELEASE]
    at org.springframework.boot.SpringApplication.applyInitializers(SpringApplication.java:633) [spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE]
    at org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:373) [spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:325) [spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255) [spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243) [spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE]
    at top.kylewang.nacos.cloud.user.NacosCloudUserApplication.main(NacosCloudUserApplication.java:12) [classes/:na]

相关环境:

  • 项目依赖版本
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>0.2.1.RELEASE</version>
</dependency>

配置文件:

server.port=8082
server.servlet.context-path=/user
spring.application.name=user-service
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

异常分析:

  1. 从异常栈信息上找到顶部抛出异常的类,可以看到是在创建NacosConfgiServer时报错
    Sample

  2. 跟着debug的调用链进去看源码发现,此异常是在调用NacosConfigServer的构造器,并在 new ServerHttpAgent (properties) 时抛出,这里应该是根据我们在项目中配置的nacos server的地址,去创建一个监听远端配置的agent,但是打断点可以看到,此时使用的properties内部值全部为空,我配置的contextPath和serverAddr也没有生效。
    Sample
    Sample

  3. 此时想到是不是我的配置文件还没有加载,然后将本来配置在application.properties里的配置,换到bootstrap.properties内然后再启动,再次构建NacosConfigServer时,已经将我配置的serverAddr成功注入。项目启动成功,没有抛出异常,并且正常访问nacos的配置
    Sample

  4. 通过后续了解,SpringCloudConfig和 NacosConfig这种统一配置服务在springboot项目中初始化时,都是加载bootstrap.properties配置文件去初始化上下文。
    这是由spring boot的加载属性文件的优先级决定的,想要在加载属性之前去config server上取配置文件,那NacosConfig或SpringCloudConfig相关配置就是需要最先加载的,而bootstrap.properties的加载是先于application.properties的,所以config client要配置config的相关配置就只能写到bootstrap.properties里了

发布了35 篇原创文章 · 获赞 104 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/wk52525/article/details/88547069
今日推荐