spring boot 2.5.2、spring cloud 2020.0.3
在 客户端服务 调用 /actuator/busrefresh 时,执行失败,从配置中心获取配置失败。
此时,配置中心CONFIGSERVER 已经注册到了注册中心。
日志显示,执行 上面的URL时,现实下面的信息:
o.s.b.context.config.ConfigDataLoader : Fetching config from server at : http://CONFIGSERVER
o.s.b.context.config.ConfigDataLoader : Connect Timeout Exception on Url - http://CONFIGSERVER. Will be trying the next url if available
检查启动时的日志,在从配置中心 获取配置时,有下面的日志:
o.s.b.context.config.ConfigDataLoader : Fetching config from server at : http://192.168.184.197:10000/
显示已经将 CONFIGSERVER 转换为 IP:PORT 的方式了。
问题是:
为何后来执行 /actuator/busrefresh 却没有如 启动时 这么做呢?奇怪
问题发生时的配置:
spring.config.import=optional:configserver:http://CONFIGSERVER
更改为下面的配置——直接指向 配置中心——时,执行 busrefresh 是成功的:
spring.config.import=optional:configserver:http://localhost:10000/
错误日志在 ConfigServerConfigDataLoader 类 的 getRemoteEnvironment 函数里面,调试发现,函数里面 resource.getProperties() 获取的 properties 里面的 uri不同:
启动是是 [http://192.168.111.197:10000/],而启动后 执行 /busrefresh 时是 [http://CONFIGSERVER]。
现在没有思路了,要怎么解决呢?难道是 Eureka客户端 的错误——没有把 CONFIGSERVER 解析为 某一个 配置中心的 IP:PORT ?
添加下面的依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
使用 bootstrap.properties:
spring.application.name=web3-client
eureka.instance.lease-renewal-interval-in-seconds=10
eureka.instance.lease-expiration-duration-in-seconds=30
eureka.instance.prefer-ip-address=true
eureka.client.service-url.defaultZone=http://localhost:8771/eureka/,http://localhost:8772/eureka/,http://localhost:8773/eureka/
eureka.client.fetch-registry=true
eureka.client.enabled=true
eureka.client.refresh.enable=false
eureka.client.registry-fetch-interval-seconds=10
spring.cloud.config.name=web3-client
spring.cloud.config.profile=dev
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.serviceId=CONFIGSERVER
spring.cloud.refresh.enabled=true
spring.cloud.config.fail-fast=true
去掉 application.properties 、 bootstrap.properties 中的配置:
spring.config.import
结果:
启动获取配置成功;
执行/actuator/refresh获取配置成功;
执行/actuator/busrefresh获取配置成功;