java B2B2C电子商务平台分析之八--配置中心svn示例和refresh
國內很多公司都使用的svn來做代碼的版本控制,我們先介紹以下如何使用svn+Spring Cloud Config來做配置中心。愿意了解源碼的朋友直接求求交流分享技術:二一四七七七五六三三
svn版本 同樣先示例server端的代碼,基本步驟一樣。
1、添加依賴
<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency><dependency><groupId>org.tmatesoft.svnkit</groupId><artifactId>svnkit</artifactId></dependency> </dependencies> 復制代碼需要多引入svnkitr包
2、配置文件
server:port: 8001spring:cloud:config:server:svn:uri: http://192.168.0.6/svn/repo/config-repousername: usernamepassword: passworddefault-label: trunkprofiles:active: subversionapplication:name: spring-cloud-config-server 復制代碼和git版本稍有區別,需要顯示聲明subversion.
3、啟動類 啟動類沒有變化,添加@EnableConfigServer激活對配置中心的支持
@EnableConfigServer @SpringBootApplication public class ConfigServerApplication {public static void main(String[] args) {SpringApplication.run(ConfigServerApplication.class, args);} } 復制代碼4、測試 服務端測試
訪問:http:/ /localhost:8001/neo-config-dev.properties,返回:neo.hello: hello im dev,說明服務端可以正常讀取到svn代碼庫中的配置信息。修改配置文件neo-config-dev.properties中配置信息為:neo.hello=hello im dev update,再次在瀏覽器訪問http:/ /localhost:8001/neo-config-dev.properties,返回:neo.hello: hello im dev update。說明server端會自動讀取最新提交的內容
客戶端測試
客戶端直接使用上一篇示例項目spring-cloud-config-client來測試,配置基本不用變動。啟動項目后訪問:http:/ /localhost:8002/hello,返回:hello im dev update說明已經正確的從server端獲取到了參數。同樣修改svn配置并提交,再次訪問http://localhost:8002/hello``依然獲取的是舊的信息,和git版本的問題一樣。
refresh 現在來解決上一篇的遺留問題,這個問題在svn版本中依然存在。Spring Cloud Config分服務端和客戶端,服務端負責將git(svn)中存儲的配置文件發布成REST接口,客戶端可以從服務端REST接口獲取配置。但客戶端并不能主動感知到配置的變化,從而主動去獲取新的配置。客戶端如何去主動獲取新的配置信息呢,springcloud已經給我們提供了解決方案,每個客戶端通過POST方法觸發各自的/refresh。
修改spring-cloud-config-client項目已到達可以refresh的功能。
1、添加依賴
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId> </dependency> 復制代碼增加了spring-boot-starter-actuator包,spring-boot-starter-actuator是一套監控的功能,可以監控程序在運行時狀態,其中就包括/refresh的功能。
2、 開啟更新機制 需要給加載變量的類上面加載@RefreshScope,在客戶端執行/refresh的時候就會更新此類下面的變量值。
@RestController @RefreshScope // 使用該注解的類,會在接到SpringCloud配置中心配置刷新的時候,自動將新的配置更新到該類對應的字段中。 class HelloController {@Value("${neo.hello}")private String hello;@RequestMapping("/hello")public String from() {return this.hello;} } 復制代碼3、測試 springboot 1.5.X 以上默認開通了安全認證,所以需要在配置文件application.properties添加以下配置
management.security.enabled=false OK 這樣就改造完了,以post請求的方式來訪問http:/ /localhost:8002/refresh?就會更新修改后的配置文件。
我們再次來測試,首先訪問http:/ /localhost:8002/hello,返回:hello im dev,我將庫中的值修改為hello im dev update。在win上面打開cmd執行curl -X POST http:/ /localhost:8002/refresh,返回["neo.hello"]說明已經更新了neo.hello的值。我們再次訪問http:/ /localhost:8002/hello,返回:hello im dev update,客戶端已經得到了最新的值。
每次手動刷新客戶端也很麻煩,有沒有什么辦法只要提交代碼就自動調用客戶端來更新呢,github的webhook是一個好的辦法。
4、webhook WebHook是當某個事件發生時,通過發送http post請求的方式來通知信息接收方。Webhook來監測你在Github.com上的各種事件,最常見的莫過于push事件。如果你設置了一個監測push事件的Webhook,那么每當你的這個項目有了任何提交,這個Webhook都會被觸發,這時Github就會發送一個HTTP POST請求到你配置好的地址。
如此一來,你就可以通過這種方式去自動完成一些重復性工作,比如,你可以用Webhook來自動觸發一些持續集成(CI)工具的運作,比如Travis CI;又或者是通過 Webhook 去部署你的線上服務器。下圖就是github上面的webhook配置。
Payload URL?:觸發后回調的URL Content type?:數據格式,兩種一般使用json Secret?:用作給POST的body加密的字符串。采用HMAC算法 events?:觸發的事件列表。 events事件類型 描述 push 倉庫有push時觸發。默認事件 create 當有分支或標簽被創建時觸發 delete 當有分支或標簽被刪除時觸發 svn也有類似的hook機制,每次提交后會觸發post-commit腳本,我們可以在這里寫一些post請求。 這樣我們就可以利用hook的機制去觸發客戶端的更新,但是當客戶端越來越多的時候hook支持的已經不夠優雅,另外每次增加客戶端都需要改動hook也是不現實的。其實Spring Cloud給了我們更好解決方案,后面文章來介紹。
技術架構圖如下: 資料和源碼來源
轉載于:https://juejin.im/post/5c00e3d9e51d451a2e377ba1
總結
以上是生活随笔為你收集整理的java B2B2C电子商务平台分析之八--配置中心svn示例和refresh的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装mysql-8.0.13-winx6
- 下一篇: nodejs渐入佳境[8]-json处理