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》
一轉眼,寫不少了啊,,,,,
代碼如下圖:
Config Server
只增加一個@EnableConfigServer。
config內容支持從git、svn、本地獲取,本例採用本地文件。
在src-main-resources目錄下增加如下兩個配置文件:
新增文件
這個配置文件的命名是有規則的,它決定了Http訪問這些配置內容的URL,本文使用的是/{application}-{profile}.yml這種方式,對應的URL就是http://IP:PORT/application/profile。
詳細的規則網上一搜全是,有想用其他方式的自己找一下。
dev的內容如下:
配置文件
test裡面改成test。記住這個配置項的Key是userservice.env。
application.xml
紅框代表告知Config Server從本地文件獲取配置內容。從SVN、GIT上獲取請查閱官方文檔或相關教程。
Config Client
使用我之前文章寫User Service工程,pom添加以下依賴:
pom.xml
Controller增加如下:
Controller
@Refresh這個註解後文講。
紅框就是我們要取得配置項的Key。
增加bootstrap.yml,因為配置項要先於application.yml載入,所以內容要放在這個文件里。
配置文件
bootstrap.yml內容如下:
bootstrap.yml
注意兩個紅框,決定了我們要從Config Server里獲取哪個配置文件。
application.yml:
application.yml
結果
依次啟動Eureka註冊中心、Config Server、User Service:
Eureka
先查看Config Server里的配置:
Config Server
把URL中的dev改成test,紅框的內容就會變成test。
訪問User Service的URL結果如下:
dev
將User Service的bootstrap.yml里的dev改成test,重啟服務,配置項的內容變了:
test
配置重載
先說明一下,為實現這一功能我費了好長時間,因為我用的版本是2.0.0.M3,而現在官方代碼、文檔以及網上你能搜到的參考資料都是1.5.X的,2.0發生了一些變化,下文我會說一下。
我們都知道,配置項一般是項目啟動時載入到內存里,如果運行中配置項發生了變化,我們一般是重啟服務,這就太不好了,所以我們需要重載入功能。
這一功能實現在客戶端。
pom.xml增加以下依賴
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增加
關閉校驗
修改完畢,重啟User Service,獲取的配置內容還是dev。這時候修改Config Server裡面的user-service-dev.yml,dev改成dev1。
Config Server的內容已經變了:
dev1
但是User Service還沒有變:
dev
使用Postman發送請求:
refresh
如果沒有關閉校驗,這裡會顯示401。
再看一下User Service:
dev1
下一篇講啥呢?
※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配置