當前位置:
首頁 > 知識 > Spring Cloud分散式配置中心Config

Spring Cloud分散式配置中心Config

Spring Cloud分散式配置中心Config

Spring Cloud Config

重點在最後一節講配置重載入的內容,官方文檔和現在很多資料沒有提到最新的變化!

在實際工作中,我們經常會遇到不同環境下處理配置文件的問題,最常見的可能就是資料庫連接了。開發、測試、生產環境使用不同的口令訪問資料庫不同的地址。

我在工作這些年,待的一些公司大概是兩種方式來處理:

1、 開發人員一肩挑,開發測試生產的配置都有,打包的時候先配好。

比如我們經常在配置文件里這麼寫:

#dev

db.ip:192.168.100.111

#test

#db.ip:192.168.100.112

#prod

#db.ip:192.168.100.113

打包之前改一改。

2、 開發、測試、運維各負其責。

那時候是開發發版,我們要寫好部署文檔,明確告知哪個配置文件要改哪裡。測試、運維人員拿到之後還要寫個部署文檔,第一步停服務,命令是XXXX,第二步備份,命令是YYYY,第三步改配置,ZZZZ……

寫完之後我們還要審核,看有沒有漏掉或錯誤的。

部署的時候,配置文件要麼先從war包里拉出來,修改好了再放進去。要麼是在Web容器里先運行解壓,修改配置之後再啟動容器。

對單體應用來說,這麼做沒啥問題,但是微服務這種,幾十上百上千的,每個微服務再分開發、測試、生產環境,再像以前那麼搞就要命了,所以使用Spring Cloud Config統一配置。


Config Server

參考以前的文章構建服務端,依賴是Web、Eureka Discovery、Config Server。

0、《Spring boot+MyBatis+PageHelper+JSON》

1、《極簡Spring Boot搭建、開發、部署》

2、《Spring Cloud註冊中心——Eureka&集群》

3、《Spring Cloud網關Zuul&過濾器&集群方案》

4、《Spring Cloud網關&負載均衡Zuul&Ribbon》(好奇怪,我編輯的時候,這篇文章搜不到)

5、《Spring Cloud服務間調用Feign》

6、《Spring Cloud斷路器Hystrix》

一轉眼,寫不少了啊,,,,,

代碼如下圖:

Spring Cloud分散式配置中心Config

Config Server

只增加一個@EnableConfigServer。

config內容支持從git、svn、本地獲取,本例採用本地文件。

在src-main-resources目錄下增加如下兩個配置文件:

Spring Cloud分散式配置中心Config

新增文件

這個配置文件的命名是有規則的,它決定了Http訪問這些配置內容的URL,本文使用的是/{application}-{profile}.yml這種方式,對應的URL就是http://IP:PORT/application/profile

詳細的規則網上一搜全是,有想用其他方式的自己找一下。

dev的內容如下:

Spring Cloud分散式配置中心Config

配置文件

test裡面改成test。記住這個配置項的Key是userservice.env。
Spring Cloud分散式配置中心Config

application.xml

紅框代表告知Config Server從本地文件獲取配置內容。從SVN、GIT上獲取請查閱官方文檔或相關教程。


Config Client

使用我之前文章寫User Service工程,pom添加以下依賴:

Spring Cloud分散式配置中心Config

pom.xml

Controller增加如下:

Spring Cloud分散式配置中心Config

Controller

@Refresh這個註解後文講。

紅框就是我們要取得配置項的Key。

增加bootstrap.yml,因為配置項要先於application.yml載入,所以內容要放在這個文件里。

Spring Cloud分散式配置中心Config

配置文件

bootstrap.yml內容如下:

Spring Cloud分散式配置中心Config

bootstrap.yml

注意兩個紅框,決定了我們要從Config Server里獲取哪個配置文件。

application.yml:

Spring Cloud分散式配置中心Config

application.yml


結果

依次啟動Eureka註冊中心、Config Server、User Service:

Spring Cloud分散式配置中心Config

Eureka

先查看Config Server里的配置:

Spring Cloud分散式配置中心Config

Config Server

把URL中的dev改成test,紅框的內容就會變成test。

訪問User Service的URL結果如下:

Spring Cloud分散式配置中心Config

dev

將User Service的bootstrap.yml里的dev改成test,重啟服務,配置項的內容變了:

Spring Cloud分散式配置中心Config

test

配置重載

先說明一下,為實現這一功能我費了好長時間,因為我用的版本是2.0.0.M3,而現在官方代碼、文檔以及網上你能搜到的參考資料都是1.5.X的,2.0發生了一些變化,下文我會說一下。

我們都知道,配置項一般是項目啟動時載入到內存里,如果運行中配置項發生了變化,我們一般是重啟服務,這就太不好了,所以我們需要重載入功能。

這一功能實現在客戶端。

pom.xml增加以下依賴

Spring Cloud分散式配置中心Config

pom.xml

actuator是個好東西,抽空我寫一篇講講。

還記得在Controller加的註解@RefreshScope嗎?這個註解功能就是說這個Bean會被重新載入。所以在實際開發中,配置項都要有個專門的類來存放,這個類就可以加上這個註解。本例為了方便就直接寫在Controller了。

如何觸發這個重載入動作呢?官方文檔以及網上資料都說:POST請求客戶端(本文中的User Service)http://IP:PORT/refresh 即可,這是1.5.X版本!2.0版本變成了http://IP:PORT/application/refresh 切記!

這個URL是需要許可權的,我們先關閉校驗。

userservice的application.yml增加

Spring Cloud分散式配置中心Config

關閉校驗

修改完畢,重啟User Service,獲取的配置內容還是dev。這時候修改Config Server裡面的user-service-dev.yml,dev改成dev1。

Config Server的內容已經變了:

Spring Cloud分散式配置中心Config

dev1

但是User Service還沒有變:

Spring Cloud分散式配置中心Config

dev

使用Postman發送請求:

Spring Cloud分散式配置中心Config

refresh

如果沒有關閉校驗,這裡會顯示401。

再看一下User Service:

Spring Cloud分散式配置中心Config

dev1

下一篇講啥呢?

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

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


請您繼續閱讀更多來自 Java個人學習心得 的精彩文章:

Spring Cloud斷路器Hystrix
Spring Cloud服務間調用Feign
Spring Cloud網關&負載均衡Zuul&Ribbon
Spring Cloud網關Zuul&過濾器&集群方案
Spring Cloud註冊中心——Eureka&集群

TAG:Java個人學習心得 |

您可能感興趣

SpringCloud統一配置中心Config Client
SpringBoot使用Nacos配置中心
Spring Boot整合Apollo配置中心
Spring Config 高可用配置中心
dotnet core 使用Apollo配置中心
配置SAP Solution Manager連接監控遠程Microsoft SQL Server
Spring Boot 配置文件 yml與properties
SpringCloud實現Eureka集群配置
Eclipse Debug 配置
SpringBoot中如何進行Bean配置
VMware Horizon View Real-Time Audio-Video 相關配置
Selenium的安裝與Firefox配置
Centos下安裝配置WordPress與nginx教程
springboot配置druid連接池
Servlet+MyBatis項目轉Spring Cloud微服務,多數據配置修改建議
SpringBoot | 第三章:springboot 配置詳解
MyBatis 配置 typeHandlers 詳解
spring-boot 之 使員Druid 整合Mybatis 最簡配置多數據源
Linux系統安裝Oracle,配置etc/security/limits.conf文件
Jenkins GitLab webhooks配置