项目环境
- Springboot 2.4.1
Nacos配置中心依赖(Springboot 2.4.x Nacos依赖)
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2021.1</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.1.4</version>
</dependency>
问题描述
本地能够正常读取到远程Nacos配置中心的配置项,但是部署到服务器报错:
[NACOS SocketTimeoutException httpGet] currentServerAddr:http://localhost:8848,err : connect timed out
[fixed-localhost_8848] [sub-server] get server config exception, dataId=null.properties, group=DEFAULT_GROUP, tenant=
看错误提示貌似是没有读取到配置的server-addr,导致使用了默认的nacos服务器地址。但是检查配置文件 resources/bootstrap.yml
,配置确实是存在的,检查package的jar包配置文件也是存在的,相关配置的环境变量也是存在的。
- bootstrap.yml
server:
port: 8080
spring:
application:
name: hello
cloud:
nacos:
config:
enabled: true
refresh-enabled: true
access-key: ${NACOS_ACCESS_KEY}
secret-key: ${NACOS_SECRET_KEY}
server-addr: ${NACOS_ADDR}
namespace: ${NACOS_NAMESPACE}
group: ${NACOS_GROUP}
prefix: ${spring.application.name}
file-extension: yaml
问题排查
手动将bootstrap配置文件注释掉,可以看到 spring-cloud-starter-alibaba-nacos-config
自动配置启动了nacos配置中心,由于不存在相关配置文件,启动报错:[NACOS SocketTimeoutException httpGet] currentServerAddr:http://localhost:8848, err : connect timed out,问题得到复现。
产生问题的原因即bootstrap.yml
没有被读取到。
查看本地及远程服务器相关启动参数,发现远程服务器Java启动参数指定了 -Dspring.config.location=/data/application.yaml
,移除此参数再进行启动,nacos配置项从远程服务器获取恢复正常。
2022-11-17 11:12:53.750 INFO 12636 --- [ main] c.a.n.c.c.impl.LocalConfigInfoProcessor : LOCAL_SNAPSHOT_PATH:C:\Users\longyuan\nacos\config
2022-11-17 11:12:54.254 INFO 12636 --- [ main] c.a.nacos.client.config.impl.Limiter : limitTime:5.0
2022-11-17 11:12:54.392 INFO 12636 --- [ main] c.a.nacos.client.config.utils.JvmUtil : isMultiInstance:false
2022-11-17 11:12:54.449 WARN 12636 --- [ main] c.a.c.n.c.NacosPropertySourceBuilder : Ignore the empty nacos configuration and get it based on dataId[hello.yaml] & group[uat]
2022-11-17 11:12:54.450 INFO 12636 --- [ main] b.c.PropertySourceBootstrapConfiguration : Located property source: [BootstrapPropertySource {name='bootstrapProperties-hello.yaml,uat'}, BootstrapPropertySource {name='bootstrapProperties-hello,uat'}]
问题原因:-Dspring.config.location 参数导致 bootstrap.yaml 配置文件不能正常读取