上一篇文章講了SpringCloudConfig
集成Git
倉庫,配和 Eureka
注冊(cè)中心一起使用,但是我們會(huì)發(fā)現(xiàn),修改了Git
倉庫的配置后,需要重啟服務(wù),才可以得到最新的配置,這一篇我們嘗試使用 Refresh
實(shí)現(xiàn)主動(dòng)獲取 Config Server
配置服務(wù)中心的最新配置
把上一篇,示例代碼下載,才可以進(jìn)行一下的操作,下載地址在文章末尾
spring-cloud-eureka-service
spring-cloud-config-server
spring-cloud-eureka-provider-1
spring-cloud-eureka-provider-2
spring-cloud-eureka-provider-3
spring-cloud-feign-consumer
修改第九篇文章項(xiàng)目
spring-cloud-eureka-provider-1
spring-cloud-eureka-provider-2
spring-cloud-eureka-provider-3
<!-- actuator 監(jiān)控 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
在 application.properties
添加以下配置.關(guān)閉安全認(rèn)證
#關(guān)閉刷新安全認(rèn)證
management.security.enabled=false
值是false
的話,除開health
接口還依賴endpoints.health.sensitive
的配置外,其他接口都不需要輸入用戶名和密碼了
在程序的啟動(dòng)類 EurekaProviderApplication
通過 @RefreshScope
開啟 SpringCloudConfig 客戶端的 refresh
刷新范圍,來獲取服務(wù)端的最新配置,@RefreshScope
要加在聲明@Controller
聲明的類上,否則refres
h之后Conroller
拿不到最新的值,會(huì)默認(rèn)調(diào)用緩存。
package io.ymq.example.eureka.provider;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RefreshScope
@RestController
@EnableEurekaClient
@SpringBootApplication
public class EurekaProviderApplication {
@Value("${content}")
String content;
@Value("${server.port}")
String port;
@RequestMapping("/")
public String home() {
return "Hello world ,port:" + port+",content="+content;
}
public static void main(String[] args) {
SpringApplication.run(EurekaProviderApplication.class, args);
}
}
按照順序依次啟動(dòng)項(xiàng)目
spring-cloud-eureka-service
spring-cloud-config-server
spring-cloud-eureka-provider-1
spring-cloud-eureka-provider-2
spring-cloud-eureka-provider-3
spring-cloud-feign-consumer
啟動(dòng)該工程后,訪問服務(wù)注冊(cè)中心,查看服務(wù)是否都已注冊(cè)成功:http://localhost:8761/
修改Git
倉庫配置,在 content=hello dev
后面加個(gè) 123456
命令窗口,通過curl http://127.0.0.1:9000/hello
訪問服務(wù),或者在瀏覽器訪問http://127.0.0.1:9000/hello
F5 刷新
發(fā)現(xiàn)沒有得到最新的值
通過 Postman
發(fā)送 POST
請(qǐng)求到:http://localhost:8081/refresh,http://localhost:8083/refresh,我們可以看到以下內(nèi)容:
命令窗口,通過curl http://127.0.0.1:9000/hello
訪問服務(wù),或者在瀏覽器訪問http://127.0.0.1:9000/hello
F5 刷新
發(fā)現(xiàn):服務(wù)8082 沒有刷新到最新配置 因?yàn)闆]有手動(dòng)觸發(fā)更新
GitHub:https://github.com/souyunku/spring-cloud-examples/tree/master/spring-cloud-config-eureka-refresh
碼云:https://gitee.com/souyunku/spring-cloud-examples/tree/master/spring-cloud-config-eureka-refresh
留了一個(gè)懸念,Config Client
實(shí)現(xiàn)配置的實(shí)時(shí)更新,我們可以使用 /refresh
接口觸發(fā),如果所有配置的更改,都需要手動(dòng)觸發(fā),那豈不是維護(hù)成本很高,而使用 Spring Cloud Bus
消息總線實(shí)現(xiàn)方案,可以優(yōu)雅的解決以上問題,下篇文章我們講Spring Cloud Bus
的使用,關(guān)注下文章末尾公眾號(hào),支持下作者,感謝
Wechat:關(guān)注公眾號(hào),搜云庫技術(shù)團(tuán)隊(duì),專注于開發(fā)技術(shù)的研究與知識(shí)分享
更多建議: