以前講的配置管理, 只有在應用啓動時會讀取到GIT的內容, 以後只要應用不重啓,GIT中文件的修改,應用沒法感知, 即便重啓Config Server也不行。html
好比上一單元(Spring Cloud 入門教程(二): 配置管理)中的Hello World 應用,手動更新GIT中配置文件config-client-dev.properties的內容(別忘了用GIT push到服務器)git
hello=Hello World from GIT version 1
刷新 http://locahost/8881/hello,頁面內容仍然和以前同樣,並無反映GIT中最新改變, 重啓config-server也同樣,沒有任何變化。要讓客戶端應用感知到這個變哈, Spring Cloud提供瞭解決方案是,客戶端用POST請求/refresh
方法就能夠刷新配置內容。spring
1. 讓客戶端支持/refresh方法服務器
要讓/refresh生效,客戶端須要增長一些代碼支持:app
1). 首先,在pom.xml中添加如下依賴。spring-boot-starter-actuator
是一套監控的功能,能夠監控程序在運行時狀態,其中就包括/refresh
的功能。分佈式
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
2). 其次,開啓refresh機制, 須要給加載變量的類上面加載@RefreshScope註解
,其它代碼可不作任何改變,那麼在客戶端執行/refresh
的時候就會更新此類下面的變量值,包括經過config client從GIT獲取的配置。spring-boot
@SpringBootApplication @RestController @RefreshScope public class ConfigClientApplication { public static void main(String[] args) { SpringApplication.run(ConfigClientApplication.class, args); } @Value("${hello}") String hello; @RequestMapping(value = "/hello") public String hello(){ return hello; } }
3). 啓動應用, 查看http://localhost:8881/hello工具
4). 再次修改config-client-dev.properties的內容post
hello=Hello World from GIT version 2
5). 用chome的postman發送POST請求:http://localhost/refeshurl
能夠從POST的結果看到,這次refresh刷新的配置變量有hello
6). 再次訪問http://localhost/hello,可見到配置已經被刷新
2. 經過Webhook自動觸發/refresh方法刷新配置
以上每當GIT中配置文件被修改,仍然須要咱們主動調用/refresh方法(手動調用或者寫代碼調用), 有沒有辦法讓GIT中配置有改動就自動觸發客戶端的rfresh機制呢? 答案是:有。能夠經過GIT提供的githook來監聽push命令,若是項目中使用了Jenkins等持續集成工具(也是利用githook來監聽的),就能夠監聽事件處理中直接調用/refresh方法就能夠了。
上一篇:Spring Cloud 入門教程(二): 配置管理
下一篇:Spring Cloud 入門教程(四): 分佈式環境下自動發現配置服務
參考:
http://www.cnblogs.com/ityouknow/p/6906917.html