當前位置:
首頁 > 知識 > springcloud(七):配置中心svn示例和refresh

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

上一篇springcloud(六):配置中心git示例留了一個小問題,當重新修改配置文件提交後,客戶端獲取的仍然是修改前的信息,這個問題我們先放下,待會再講。國內很多公司都使用的svn來做代碼的版本控制,我們先介紹以下如何使用svn+Spring Cloud Config來做配置中心。

svn版本

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

1、添加依賴



org.springframework.cloud
spring-cloud-config-server


org.tmatesoft.svnkit
svnkit

需要多引入svnkitr包

2、配置文件

server:
port: 8001

spring:
cloud:
config:
server:
svn:
uri: http://192.168.0.6/svn/repo/config-repo
username: username
password: password
default-label: trunk
profiles:
active: subversion
application:
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、添加依賴


org.springframework.boot
spring-boot-starter-actuator

增加了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配置。

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

  • 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給了我們更好解決方案,後面文章來介紹。

作者:純潔的微笑

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 達人科技 的精彩文章:

收集的常用簡單的演算法

TAG:達人科技 |

您可能感興趣

Spring Boot 配置文件 yml與properties
Linux系統安裝Oracle,配置etc/security/limits.conf文件
SpringBoot | 第三章:springboot 配置詳解
dotnet core 使用Apollo配置中心
SpringCloud統一配置中心Config Client
php.ini中的include_path配置
springboot配置druid連接池
sprintboot+mybatis踩坑:查詢不到數據list「null」——支持駝峰配置
redis單點、主從、哨兵sentinel,集群cluster配置使用
Ubuntu Linux環境下shadowsocks-qt5的安裝與配置
Centos下安裝配置WordPress與nginx教程
eclipse中配置jdk+tomcat的圖文教程
Jenkins GitLab webhooks配置
SpringBoot使用Nacos配置中心
Spring Security 實現 antMatchers 配置路徑的動態獲取
MyBatis 配置 typeHandlers 詳解
Selenium的安裝與Firefox配置
linux 安裝 jdk、tomcat + 配置 tomcat 啟動 + tomcat 命令
VMware Horizon View Real-Time Audio-Video 相關配置
配置SAP Solution Manager連接監控遠程Microsoft SQL Server