天天看點

springcloud(七):配置中心svn示例和refresh

同樣先示例server端的代碼,基本步驟一樣。

需要多引入svnkitr包

和git版本稍有差別,需要顯示聲明subversion.

啟動類沒有變化,添加<code>@EnableConfigServer</code>激活對配置中心的支援

服務端測試

通路:<code>http://localhost:8001/neo-config-dev.properties</code>,傳回:<code>neo.hello: hello im dev</code>,說明服務端可以正常讀取到svn代碼庫中的配置資訊。修改配置檔案<code>neo-config-dev.properties</code>中配置資訊為:<code>neo.hello=hello im dev update</code>,再次在浏覽器通路<code>http://localhost:8001/neo-config-dev.properties</code>,傳回:<code>neo.hello: hello im dev update</code>。說明server端會自動讀取最新送出的内容

用戶端測試

用戶端直接使用上一篇示例項目<code>spring-cloud-config-client</code>來測試,配置基本不用變動。啟動項目後通路:<code>http://localhost:8002/hello,傳回:</code>hello im dev update``說明已經正确的從server端擷取到了參數。同樣修改svn配置并送出,再次通路<code>http://localhost:8002/hello</code>依然擷取的是舊的資訊,和git版本的問題一樣。

現在來解決上一篇的遺留問題,這個問題在svn版本中依然存在。Spring Cloud Config分服務端和用戶端,服務端負責将git(svn)中存儲的配置檔案釋出成REST接口,用戶端可以從服務端REST接口擷取配置。但用戶端并不能主動感覺到配置的變化,進而主動去擷取新的配置。用戶端如何去主動擷取新的配置資訊呢,springcloud已經給我們提供了解決方案,每個用戶端通過POST方法觸發各自的<code>/refresh</code>。

修改<code>spring-cloud-config-client</code>項目已到達可以refresh的功能。

增加了<code>spring-boot-starter-actuator</code>包,<code>spring-boot-starter-actuator</code>是一套監控的功能,可以監控程式在運作時狀态,其中就包括<code>/refresh</code>的功能。

需要給加載變量的類上面加載<code>@RefreshScope</code>,在用戶端執行<code>/refresh</code>的時候就會更新此類下面的變量值。

springboot 1.5.X 以上預設開通了安全認證,是以需要在配置檔案<code>application.properties</code>添加以下配置

OK 這樣就改造完了,以post請求的方式來通路<code>http://localhost:8002/refresh</code> 就會更新修改後的配置檔案。

我們再次來測試,首先通路<code>http://localhost:8002/hello</code>,傳回:<code>hello im dev</code>,我将庫中的值修改為<code>hello im dev update</code>。在win上面打開cmd執行<code>curl -X POST http://localhost:8002/refresh</code>,傳回<code>["neo.hello"]</code>說明已經更新了<code>neo.hello</code>的值。我們再次通路<code>http://localhost:8002/hello</code>,傳回:<code>hello im dev update</code>,用戶端已經得到了最新的值。

每次手動重新整理用戶端也很麻煩,有沒有什麼辦法隻要送出代碼就自動調用用戶端來更新呢,github的webhook是一個好的辦法。

WebHook是當某個事件發生時,通過發送http post請求的方式來通知資訊接收方。Webhook來監測你在Github.com上的各種事件,最常見的莫過于push事件。如果你設定了一個監測push事件的Webhook,那麼每當你的這個項目有了任何送出,這個Webhook都會被觸發,這時Github就會發送一個HTTP POST請求到你配置好的位址。

如此一來,你就可以通過這種方式去自動完成一些重複性工作,比如,你可以用Webhook來自動觸發一些持續內建(CI)工具的運作,比如Travis CI;又或者是通過 Webhook 去部署你的線上伺服器。下圖就是github上面的webhook配置。

springcloud(七):配置中心svn示例和refresh

<code>Payload URL</code> :觸發後回調的URL

<code>Content type</code> :資料格式,兩種一般使用json

<code>Secret</code> :用作給POST的body加密的字元串。采用HMAC算法

<code>events</code> :觸發的事件清單。

events事件類型

描述

push

倉庫有push時觸發。預設事件

create

當有分支或标簽被建立時觸發

delete

當有分支或标簽被删除時觸發

svn也有類似的hook機制,每次送出後會觸發post-commit腳本,我們可以在這裡寫一些post請求

這樣我們就可以利用hook的機制去觸發用戶端的更新,但是當用戶端越來越多的時候hook支援的已經不夠優雅,另外每次增加用戶端都需要改動hook也是不現實的。其實Spring Cloud給了我們更好解決方案,後面文章來介紹。

<a href="https://github.com/ityouknow/spring-cloud-starter">示例代碼</a>

作者:純潔的微笑

版權歸作者所有,轉載請注明出處

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。 

本文如對您有幫助,還請多幫 【推薦】 下此文。 

如果喜歡我的文章,請關注我的公衆号

本文轉自純潔的微笑部落格部落格園部落格,原文連結:http://www.cnblogs.com/ityouknow/p/6906917.html,如需轉載請自行聯系原作者