文章目录
一,com.alibaba.nacos.api.exception.NacosException: endpoint is blank
1,分析定位
启动项目时有如下错误日志打印。
2024-07-10 08:20:20.324 ERROR 10476 --- [ main] c.a.cloud.nacos.NacosConfigProperties : create config service error!properties=NacosConfigProperties{serverAddr='null', encode='null', group='DEFAULT_GROUP', prefix='null', fileExtension='properties', timeout=3000, endpoint='null', namespace='null', accessKey='null', secretKey='null', contextPath='null', clusterName='null', name='null', sharedDataids='null', refreshableDataids='null', extConfig=null},e=,
Caused by: com.alibaba.nacos.api.exception.NacosException: endpoint is blank
at com.alibaba.nacos.client.config.impl.ServerListManager.<init>(ServerListManager.java:154) ~[nacos-client-1.1.1.jar:na]
at com.alibaba.nacos.client.config.http.ServerHttpAgent.<init>(ServerHttpAgent.java:244) ~[nacos-client-1.1.1.jar:na]
at com.alibaba.nacos.client.config.NacosConfigService.<init>(NacosConfigService.java:83) ~[nacos-client-1.1.1.jar:na]
... 39 common frames omitted
显然,启动没有读取到配置文件bootstrap.properties中配置的nacos服务地址。
仔细检查文件名和配置,确实没发生错误,百思不得其解。
推测是项目没有读取配置文件,重启了好几次还是没有任何作用。
终于,找到了原因。
把spring cloud升级到2020.0.x以后,默认不读bootstrap配置文件。
spring官方在change note中说明了,在新版中将spring.cloud.bootstrap.enabled
默认设置为false
不启用:
Bootstrap, provided by spring-cloud-commons, is no longer enabled by default. If your project requires it, it can be re-enabled by properties or by a new starter.
解决方案有两个:
- 在
vm
启动参数中增加-Dspring.cloud.bootstrap.enabled=true
, - 增加spring-cloud-starter-bootstrap依赖
<dependency>
<groupId>com.atguigu.gulimall</groupId>
<artifactId>gulimall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
2,关于配置文件application和bootstrap的区别与练习
bootstrap.yml
和 application.yml
在Spring Cloud应用中的主要区别可以从加载顺序、使用目的、配置内容、刷新策略和注意事项等方面进行分析:
加载顺序
- bootstrap.yml:加载顺序在
application.yml
之前。它在Spring应用的上下文刷新之前被加载,主要用于配置那些影响Spring应用上下文初始化的属性。 - application.yml:加载顺序在
bootstrap.yml
之后。它在Spring应用的上下文刷新之后被加载,主要用于配置应用运行时的属性。
使用说明
- bootstrap.yml:如果使用到配置中心,其配置要放在bootstrap配置文件中。
- application.yml:用于配置应用级别的属性,如数据库连接信息、服务器端口、日志配置等。