javascript
SpringCloud 入门教程(三): 配置自动刷新
Spring Cloud 入門教程(三): 配置自動刷新
之前講的配置管理, 只有在應(yīng)用啟動時會讀取到GIT的內(nèi)容, 之后只要應(yīng)用不重啟,GIT中文件的修改,應(yīng)用無法感知, 即使重啟Config Server也不行。
比如上一單元(Spring Cloud 入門教程(二): 配置管理)中的Hello World 應(yīng)用,手動更新GIT中配置文件config-client-dev.properties的內(nèi)容(別忘了用GIT push到服務(wù)器)
hello=Hello World from GIT version 1刷新 http://locahost/8881/hello,頁面內(nèi)容仍然和之前一樣,并沒有反映GIT中最新改變, 重啟config-server也一樣,沒有任何變化。要讓客戶端應(yīng)用感知到這個變哈,?Spring Cloud提供了解決方案是,客戶端用POST請求/refresh方法就可以刷新配置內(nèi)容。
1. 讓客戶端支持/refresh方法
要讓/refresh生效,客戶端需要增加一些代碼支持:
1). 首先,在pom.xml中添加以下依賴。spring-boot-starter-actuator是一套監(jiān)控的功能,可以監(jiān)控程序在運行時狀態(tài),其中就包括/refresh的功能。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId> </dependency>2). 其次,開啟refresh機(jī)制,?需要給加載變量的類上面加載@RefreshScope注解,其它代碼可不做任何改變,那么在客戶端執(zhí)行/refresh的時候就會更新此類下面的變量值,包括通過config client從GIT獲取的配置。
@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). 啟動應(yīng)用, 查看http://localhost:8881/hello
4). 再次修改config-client-dev.properties的內(nèi)容
hello=Hello World from GIT version 25). 用chome的postman發(fā)送POST請求:http://localhost/refesh
可以從POST的結(jié)果看到,此次refresh刷新的配置變量有hello
6). 再次訪問http://localhost/hello,可見到配置已經(jīng)被刷新
2. 通過Webhook自動觸發(fā)/refresh方法刷新配置
以上每當(dāng)GIT中配置文件被修改,仍然需要我們主動調(diào)用/refresh方法(手動調(diào)用或者寫代碼調(diào)用), 有沒有辦法讓GIT中配置有改動就自動觸發(fā)客戶端的rfresh機(jī)制呢? 答案是:有。可以通過GIT提供的githook來監(jiān)聽push命令,如果項目中使用了Jenkins等持續(xù)集成工具(也是利用githook來監(jiān)聽的),就可以監(jiān)聽事件處理中直接調(diào)用/refresh方法就可以了。
?
?
?
?
?
博客:http://www.cnblogs.com/chry/p/7260778.html
總結(jié)
以上是生活随笔為你收集整理的SpringCloud 入门教程(三): 配置自动刷新的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RabbitMQ exchange交换机
- 下一篇: linux驱动模块开机自动加载,以及应用