Spring Cloud 入門教程(三): 配置自動刷新

以前講的配置管理, 只有在應用啓動時會讀取到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

相關文章
相關標籤/搜索