由於卓望公司使用的代碼版本控制工具用的SVN作爲代碼倉庫,恰巧git本人沒用過。
所以,就想聊聊svn作爲spring cloud config配置中心的倉庫那點事...
在分佈式系統中,會有很多個微服務,並且微服務可能是Ha,如此,修改配置文件給我們帶來了很多時間成本的開銷,故spring cloud config解決了這個問題,只要我們修改配置倉庫的文件,就能很好的修改配置文件的參數,特別簡單易用。
Spring Cloud Config 簡介:
Spring Cloud Config 支持配置文件放在遠程倉庫中,例如 Git、SVN,也可以掛載到本地。spring cloud config 分爲server、client端。
spring cloud config server端:
新建一個springcloud config server項目:
首先,從pom文件開始吧:引入依賴
主要引入如圖中的2個依賴jar包,config-server標誌服務作爲config server服務,svnkit標識svn作爲配置倉庫。SVNKit (JavaSVN)是一個純Java的SVN客戶端庫,使用 SVNKit無需安裝任何SVN的客戶端,支持各種操作系統。這不是一個開源的類庫,但你可以免費使用。通過SVNKit,你可以在SVN上開發出自己的應用。
配置文件application.properties
這裏要注意的是要使用svn作爲配置中心,必須顯示聲明spring.profiles.active=subversion,不然還是用的git,svn默認的lable是trunk,git默認的是master,客戶端在使用的時候注意指定label,這裏search-paths使用了{application}佔位符,用來根據客戶端的spring.application.name來動態搜索配置目錄,即按照每個應用一個配置目錄的形式來組織配置。
如上這個圖中比較重要的就是svn 配置倉庫的配置了。
最後看一下,啓動類:
@EnableConfigServer:將該服務作爲一個config server服務啓動
啓動服務,驗證config server服務是否可用:訪問 http://10.2.8.42:1112/efficiency-basicdata-service-dev.properties
這裏要注意的是要使用svn作爲配置中心,必須顯示聲明spring.profiles.active=subversion,不然還是用的git,svn默認的lable是trunk,git默認的是master,客戶端在使用的時候注意指定label,這裏search-paths使用了{application}佔位符,用來根據客戶端的spring.application.name來動態搜索配置目錄,即按照每個應用一個配置目錄的形式來組織配置。
完美顯示,無問題.
spring cloud config client服務端:
客戶端也引入了eureka依賴,由於客戶端直接從config-server上獲取配置而不是從svn上獲取,所以不需要引入svnkit依賴
POM文件內容:
高可用配置中心是通過服務id去自動發現config-server服務地址的,所以不用配置spring.cloud.config.uri指向具體的地址了,直接通過spring.cloud.config.discovery.service-id來指定config server的服務名,這裏是config-server,同時需要將spring.cloud.config.discovery.enable=true(默認爲false,使用uri方式),聲明通過服務發現的方式來獲取config server地址。
爲了能動態刷新配置,需要在允許動態刷新的類上註解@RefreshScope,這裏我們定義了一個變量from,值是通過@Value("${from}")註解從配置中獲取的值自動注入的,也可以從Environment中獲取
修改配置文件內容提交,刷新配置文件,取到最新值:
首先查詢config client客戶端查詢hello的值:http://10.2.8.42:2010/hello
修改svn文件:
通過訪問spring cloud config server端發現,已經修改過來了:http://10.2.8.42:1112/efficiency-basicdata-service-dev.properties
通過接口訪問客戶端:http://10.2.8.42:2010/hello 發現並沒有刷新,這時我們需要手動刷新一下:http://10.2.8.42:2010/refresh
朋友們,我不是特別會寫博客,整個過程中遇到的坑都沒有寫出來,是不知道如何寫,怎樣寫??????