同樣先示例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配置。

<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>
作者:純潔的微笑
版權歸作者所有,轉載請注明出處