文章目錄
- ??1. 現(xiàn)象??
- ??2. 引入依賴??
- ??3. 添加bootstrap.yaml配置文件??
- ??4. 配置對應(yīng)關(guān)系圖??
- ??5. 文件格式簡述??
- ??6. 啟動nacos??
- ??7. 添加生產(chǎn)配置??
- ??8. 添加測試controller??
- ??9. 啟動Springboot工程并觀察到如下日志則為成功??
- ??10. 瀏覽器驗證??
- ??11. 調(diào)整激活環(huán)境??
- ??12. 新建test環(huán)境配置??
- ??13. test配置關(guān)系圖??
- ??14. 測試方法??
- ??15. 重啟springboot服務(wù),監(jiān)控控制臺輸出??
- ??16. 瀏覽器驗證??
- ??17. 配置修改實時生效??
- ??18. 不同環(huán)境配置動態(tài)切換如何實現(xiàn)???
- ??4.1. 解決方案簡述??
- ??4.2. 通過shard-configs配置方式??
- ??4.3. 如何添加多個shared-configs配置呢???
- ??4.4. 通過extension-configs方式??
- ??4.5. 配置實時刷新測試驗證??
一、SpringBoot 使用 Nacos Config 實現(xiàn)多環(huán)境切換
1. 現(xiàn)象
在日常開發(fā)過程中,對于同一個服務(wù)或者項目工程在不同的環(huán)境所需要的配置是不同的。如訪問數(shù)據(jù)庫、redis或者MQ其他中間件,往往需要進行環(huán)境隔離,如果每次部署都需要去修改配置文件的話,是十分不方面的。在微服務(wù)場景下,這個問題尤為突出,因為代碼工程的數(shù)量是傳統(tǒng)單項目的幾十倍。需要建筑一些組件,在不修改配置穩(wěn)健的前提下動態(tài)的切換運行環(huán)境。Nacos Config提供了類似的解決方案。
2. 引入依賴
在pom文件中添加Nacos Config的依賴包,注意版本
3. 添加bootstrap.yaml配置文件
4. 配置對應(yīng)關(guān)系圖
在Nacos Config 配置管理中新增配置如圖以及其對應(yīng)關(guān)系如下:
5. 文件格式簡述
索要文件的格式為${application.name}-spring。profiles.active.{file-extension}
體現(xiàn)在nacos中,對應(yīng)尚曼的格式Data id得知應(yīng)該是nacos-config-prod.yaml
6. 啟動nacos
官網(wǎng):
???https://nacos.io/zh-cn/docs/quick-start.html??
??http://localhost:8848/nacos/?? 賬號/密碼:nacos/nacos
7. 添加生產(chǎn)配置
標簽 | 值 | 說明 |
Data ID | nacos-config-prod.yaml | |
Group | DEFAULT_GROUP | 默認,可以自定義 |
描述 | 簡述生產(chǎn)環(huán)境配置 | |
配置格式 | yaml | 文件擴展名選擇 |
配置內(nèi)容 | nacosProd: Production environment configuration | 和配置yml文件格式語法一樣 |
8. 添加測試controller
9. 啟動Springboot工程并觀察到如下日志則為成功
10. 瀏覽器驗證
打開瀏覽器訪問??http://localhost:8080/nacosProd??驗證測試結(jié)果結(jié)果如圖:
11. 調(diào)整激活環(huán)境
修改bootstrap.yaml文件中激活環(huán)境調(diào)整為test環(huán)境??spring.profiles.active.test?
?
12. 新建test環(huán)境配置
在nacos中新建data_id為nacos-config-test.yaml,并添加相同的配置參數(shù),把環(huán)境參數(shù)的內(nèi)容調(diào)整為test測試環(huán)境的
13. test配置關(guān)系圖
14. 測試方法
添加test測試環(huán)境方法,把剛才生產(chǎn)的方法注釋掉,因為咱們現(xiàn)在激活的是test測試環(huán)境的配置
15. 重啟springboot服務(wù),監(jiān)控控制臺輸出
16. 瀏覽器驗證
打開瀏覽器訪問??http://localhost:8080/nacosTest??驗證測試結(jié)果結(jié)果如圖:
17. 配置修改實時生效
在修改nacos中修改配置實時生效測試
修改前配置:
修改后配置:
發(fā)布規(guī)則
不停止項目服務(wù),打開瀏覽器訪問??http://localhost:8080/nacosTest??驗證測試結(jié)果結(jié)果如圖:
其他環(huán)境同上這里就不一一驗證了。
18. 不同環(huán)境配置動態(tài)切換如何實現(xiàn)?
這里演示修改配置文件,到正式環(huán)境,激活那個環(huán)境配置是在命令腳本中配置好的
會采用下面這種方式激活環(huán)境配置,這個命令配置環(huán)境的優(yōu)先級比項目中的配置文件中的優(yōu)先級高
二、如何解決不同環(huán)境相同配置的問題
2.1. 現(xiàn)象
在實際的開發(fā)過程中,我們的工程項目所用到的配置參數(shù)大多數(shù)并不需要根據(jù)不同的環(huán)境進行區(qū)分,生產(chǎn)、測試、開發(fā)環(huán)境所用到的參數(shù)值是相同的。如何解決同一服務(wù)在多環(huán)境中,引用相同配置的問題呢?Nacos Config也提供了相應(yīng)的解決方案。
2.2. 添加配置
在Nacos Config中添加配置,data_id為nacos-config.yaml,如圖所示:
2.3. 增加測試方法
在NacosConfigController類中添加讀取項目中共有相同配置的方法進行測試
2.4. 重新啟動項目,觀察控制臺
2.5. 瀏覽器驗證
打開瀏覽器訪問??http://localhost:8080/nacosTest??驗證測試結(jié)果結(jié)果如圖:
打開瀏覽器訪問??http://localhost:8080/nacosCommon??驗證測試結(jié)果結(jié)果如圖:
從上面測試可以看出,訪問test環(huán)境獨有的配置可以正常訪問。訪問項目中共有相同的配置也正常。
此時,我們已經(jīng)在nacos中配置了3個配置文件,nacos-config-prod.yaml、nacos-config-test.yaml和nacos-config.yaml
三、如果同一個配置項在三個配置文件中都存在且值不同,最終項目讀取是哪個呢?
3.1. 驗證思路
驗證這個其實很簡單,只需要在環(huán)境獨有的配置中配置共有相同配置文件中相同的配置標簽讓他值不一樣,瀏覽器訪問不就知道了,對吧?
這樣,演示在??nacos-config-test.yaml?
?文件中配置nacos-config.yaml文件中nacosCommon標簽,給他賦予不同的值進行測試。
3.2. 添加相同配置
nacos-config.yaml文件中原配置:
在??nacos-config-test.yaml?
?文件中配置nacosCommon標簽值為
添加相同配置
在測試配置中添加與公用配置一樣的標簽屬性值不同,觀察誰的配置生效即可
規(guī)則發(fā)布
3.3. 瀏覽器驗證
打開瀏覽器訪問??http://localhost:8080/nacosCommon??驗證測試結(jié)果結(jié)果如圖:
實際讀取的配置信息是從??nacos-config-test.yaml?
?文件中讀取的。
結(jié)論:如果配置了spring.profiles.active,則優(yōu)先獲取nacos-config-{spring.profiles.active}.yaml中的值。
四、不同微服務(wù)之間相同配置如何共享
4.1. 解決方案簡述
像這種共有中間件的配置信息企業(yè)會采用單獨的配置文件來維護,Nacos Config為我們提供了二種配置方式來解決此類場景的問題,分別是extension-configs和shard-configs配置方式。
4.2. 通過shard-configs配置方式
在nacos中新建redis.yaml,添加配置信息,reidsip:127.0.0.1,然后,配置信息發(fā)布生效
修改項目的bootstrap.yaml的配置文件,添加配置spring.cloud.nacos.config.shared-configs[0]
添加測試方法
打開瀏覽器訪問??http://localhost:8080/redisip??驗證測試結(jié)果結(jié)果如圖:
4.3. 如何添加多個shared-configs配置呢?
在nacos中新建mq.yaml,添加配置信息mqip: 127.0.0.2
修改項目的bootstrap.yaml問阿金,并添加shared-configs[1]:配置,具體配置線如下:
新增一個獲取mq信息的url以及方法
打開瀏覽器訪問??http://localhost:8080/mqip??驗證測試結(jié)果結(jié)果如圖:
4.4. 通過extension-configs方式
修改bootstrap.yaml文件,刪除shared-configs相關(guān)配置,增加extension-configs[0]和extension-configs[1]的配置如下:
重新啟動項目,分別訪問??http://localhost:8080/redisip?
??和??http://localhost:8080/mqip?
?驗證是否可以正常讀取redis.yaml和mq.yaml的配置信息
4.5. 配置實時刷新測試驗證
在nacos中修改redis.yaml和mq.yaml的信息,不重啟項目,直接訪問瀏覽器,驗證配置是否生效
redis.yaml原配置:
mq.yaml修改后配置:
mq.yaml原配置:
mq.yaml修改后配置:
訪問??http://localhost:8080/redisip?
??和??http://localhost:8080/mqip?
?驗證
五、多個shard-configs的文件中存在相同的配置
5.1. 思考1
如果多個shard-configs的文件中存在相同的配置,最終會以那個配置文件中的值為準?
5.2. 分析驗證思路
這樣場景例如:在redis.yaml和mq.yaml配置文件中有一個相同的配置屬性但是值不一樣,然后在項目中存在多個shard-configs的文件,到底優(yōu)先獲取誰的配置問價心中的信息呢?對吧
5.3. 驗證流程
- 1.在nacos上在redis.yaml和mq.yaml配置文件中都配置一個屬性為port的屬性,redis.yaml文件中配置6379,和mq.yaml配置文件中port配置5672
- 2.在項目中的bootstrap.yaml中配置多個shard-configs
- 3.在測試類中添加測試方法
- 4.瀏覽器驗證
- 5.得出結(jié)論
5.4. 流程實戰(zhàn)
- 1.在nacos上在redis.yaml和mq.yaml配置文件中都配置一個屬性為port的屬性,redis.yaml文件中配置6379,和mq.yaml配置文件中port配置5672
- 2.在項目中的bootstrap.yaml中配置多個shard-configs
- 3.在測試類中添加測試方法
- 4.瀏覽器驗證
??http://localhost:8080/port?? - 5.得出結(jié)論
結(jié)論:會以數(shù)組最后一個配置文件內(nèi)容為準
六、配置文件優(yōu)先級
6.1. springboot
提示springboot配置文件優(yōu)先級
(bootstrap.ptoterties > bootstrap.yaml > application.ptoterties > bootstrap.yaml)
6.2. nacos
如果同時在extension-configs和shard-configs存在相同的配置,最終會以那個文件中的值為準?
總結(jié)下configdemo.yaml、configdemo-test.yaml、和shard-configs、extension-configs讀取優(yōu)先級
spring.cloud.nacos.config.extension-configs[n].data-id 其中 n 的值越大,優(yōu)先級越高,因此會走group=share4_group的配置。
spring.cloud.nacos.config.shared-configs[n].data-id默認跟上面一樣的邏輯。
不同方式配置加載優(yōu)先級
Spring Cloud Alibaba Nacos Config 目前提供了三種配置能力從 Nacos 拉取相關(guān)的配置。
A: 通過 spring.cloud.nacos.config.shared-configs[n].data-id 支持多個共享 Data Id 的配置
B: 通過 spring.cloud.nacos.config.extension-configs[n].data-id 的方式支持多個擴展 Data Id 的配置
C: 通過內(nèi)部相關(guān)規(guī)則(spring.cloud.nacos.config.prefix、spring.cloud.nacos.config.file-extension、spring.cloud.nacos.config.group)自動生成相關(guān)的 Data Id 配置
當(dāng)三種方式共同使用時,他們的一個優(yōu)先級關(guān)系是:A < B < C
本文摘自 :https://blog.51cto.com/g