項目環(huán)境
- 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包配置文件也是存在的,相關配置的環(huán)境變量也是存在的。
- 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沒有被讀取到。
查看本地及遠程服務器相關啟動參數,發(fā)現遠程服務器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 配置文件不能正常讀取