本文使用 Spring Cloud 進行集中式配置管理,將以往的配置文件從項目中摘除後放到git 或svn中集中管理,並在需要變更的時候,可以通知到各應用程序,應用程序刷新配置不需要重啟。
先套用下面這張圖來看一下我們需要做的事情:
Git Repository 為存放配置的地方,當然你也可以選擇SVN。
接著我們創建多模塊Maven工程,包括 sample-cloud-all 、 sample-cloud-configserver 、 sample-cloud-client ,整體結構如下圖:
其中config-repo 為配置文件存放位置,並非一個Maven工程,只是為了便於本地修改和提交。
整體源碼地址在Github上,所以本文就不貼代碼了
至此,config-server 和 config-client 已經完成了,並且可以正常使用了。
再說一下基本原理:
git 上存放我們的遠程配置文件
config-server 連接到 git
config-client 連接到config-server
當我們啟動config-client 服務的時候,client 會通過連接的 config-server 拿到遠程git 上面的配置文件,然後通過 Spring 加載到對象中。<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxociAvPg0KPHA+xMfDtKOstbHO0sPH0N64xMHLIGdpdCDJz7XE1LazzMXk1sPOxLz+uvOjrMjnus7U2rK71tjG9CBjb25maWctY2xpZW50ILf+zvG1xMfpv/bPwsjDz+7Ev9bQ0v3Tw7XExeTWw9DFz6K4/NDCxNijvzxiciAvPg0KytfPyKOsztLDx9TaIGNvbmZpZy1jbGllbnQguaSzzNbQzO2809LAwLWjujwvcD4NCjxwcmUgY2xhc3M9"brush:java;">
然後在需要自動更新配置變量的Java類上,使用注解 @RefreshScope 修飾。
以後當我們再更新git上面的配置文件後,在 config-client 端執行POST 請求 http://localhost:8080/refresh 就可以更新刷新配置變量到內存中了。
如果我們 config-client 做的是分布式部署,豈不是要每一個機器都POST一下 /refresh 請求,這樣顯然不是最好的方法。
Spring Cloud Bus 為我們解決了這樣的問題。
先看一下下面這張套用的圖:
組件做為代理才可以使用。
經過對Spring Cloud 的統一配置管理的了解和測試,本人發現這個做的並不好,特別是在分布式部署上雖然完全可以支持,但是總感覺使用起來比較麻煩。
個人還是推薦大家使用百度開源的 Disconf 進行集中化配置管理。而且這個目前也比較成熟,很多商用項目已經在使用。
目前 Spring Cloud 還並不成熟,所以大家慢慢學習和研究,博主也期待 Spring Cloud 真正強大的一天早一天到來。