Nacos(七):Nacos共享配置
- 2019 年 10 月 3 日
- 筆記
前言
本文參考文章:
SpringCloud Alibaba – Nacos Config 自定義共享配置
前景回顧:
前幾章已經基本介紹了springcloud項目結合Nacos的大部分用法,本文介紹一下Nacos作為配置中心時,如何讀取共享配置
我的環境
- Windows10
- JDK8
- SpringCloud:Finchley.RELEASE
- SpringBoot:2.0.4.RELEASE
- spring-cloud-alibaba-dependencies:0.2.2.RELEASE
- Nacos-server:1.0.1
本文的項目Demo繼續沿用之前文章中的聚合工程Nacos
,若小夥伴還沒有之前的環境,可至源碼地址中下載
場景描述
一個項目中服務數量增加後,配置文件相應增加,多個配置文件中會存在相同的配置,那麼我們可以將相同的配置獨立出來,作為該項目中各個服務的共享配置文件,每個服務都可以通過Nacos進行共享配置的讀取
下面用一個demo演示下,是否可行
- demo工程:nacos-config-share
- 配置文件:nacos-config-share.yml
- 共享配置文件:shareconfig1.yml,shareconfig2.yml
創建項目
一如往常,還是在聚合工程Nacos下創建名為nacos-config-share
的子工程,其pom.xml文件依賴與之前的項目都一致,如果您沒有之前的項目可參考源碼地址
1、修改springboot啟動類NacosConfigShareApplication.java
@SpringBootApplication @EnableDiscoveryClient @RestController @RefreshScope public class NacosConfigShareApplication { public static void main(String[] args) { SpringApplication.run(NacosConfigShareApplication.class, args); } @Value("${nacos.share}") private String share; @Value("${share.config1}") private String shareConfig1; @Value("${share.config2}") private String shareConfig2; @RequestMapping("/getValue") public String getValue() { return share; } @RequestMapping("/getShare1") public String getShare1() { return shareConfig1; } @RequestMapping("/getShare2") public String getShare2() { return shareConfig2; } }
2、修改該項目的配置文件bootstrap.yml
spring: application: name: nacos-config-share cloud: nacos: discovery: server-addr: 127.0.0.1:8848 config: server-addr: 127.0.0.1:8848 prefix: ${spring.application.name} file-extension: yml shared-dataids: shareconfig1.yml,shareconfig2.yml refreshable-dataids: shareconfig1.yml,shareconfig2.yml
從配置文件可以看出,通過
shared-dataids
屬性來指定要讀取共享配置文件的DataID
,多個文件用,
分隔
使用refreshable-dataids
指定共享配置文件支援自動刷新
新建配置文件
這裡我們作為演示,暫不加入Namespace,直接在公共空間中創建及測試
創建配置文件nacos-config-share.yml
,詳細如下:
- DataId:
nacos-config-share.yml
- 配置格式:
YAML
- 配置內容:
server: port: 9984 nacos: share: nacos-config-share
創建共享配置文件1shareconfig1.yml
,詳細如下:
- DataId:
shareconfig1.yml
- 配置格式:
YAML
- 配置內容:
share: config1: 這裡是共享配置文件1
創建共享配置文件1shareconfig2.yml
,詳細如下:
- DataId:
shareconfig2.yml
- 配置格式:
YAML
- 配置內容:
share: config2: 這裡是共享配置文件2
創建成功後,配置列表如下圖:
啟動測試
直接啟動項目,如果啟動成功。可以看到日誌中如下資訊:
訪問啟動類中提供的介面,測試下能否獲取到共享配置文件中的值
訪問127.0.0.1:9984/getValue,返回:nacos-config-share 訪問127.0.0.1:9984/getShare1,返回:這裡是共享配置文件1 訪問127.0.0.1:9984/getShare2,返回:這裡是共享配置文件2
再測試下refreshable-dataids
配置的自動刷新是否生效
在Nacos控制台中修改共享配置文件shareconfig2.yml
的值為:這裡是共享配置文件2這裡是共享配置文件2
編輯保存後,重新請求 127.0.0.1:9984/getShare2 ,觀察返回結果如下:
這裡是共享配置文件2這裡是共享配置文件2
以上返回結果說明通過在配置文件中指定shared-dataids
和refreshable-dataids
是可以實現共享配置文件的讀取和自動刷新的。
需求變更
假設現在要讀取
shareconfig3.yml
和shareconfig4.yml
文件但是它的Group為SHARE3_GROUP
和SHARE4_GROUP
, 即共享配置文件與項目自身配置文件不在同一Group中(上邊的例子是全都在DEFAULT_GROUP分組
) 那如果繼續用上邊的方法,就無法讀取共享配置文件
這時可以使用另一個配置ext-config
,它可以由用戶自定義指定需要載入的配置DataID、Group以及是否自動刷新
並且ext-config
是一個集合(List
),支援多個配置文件的指定。
新建共享配置文件
先創建配置配置文件shareconfig3.yml
和shareconfig4.yml
,注意他們的Group屬性
- DataId:
shareconfig3.yml
- Group:
SHARE3_GROUP
- 配置格式:
YAML
- 配置內容:
share: config3: 這裡是共享配置文件3,Group:SHARE3_GROUP
- DataId:
shareconfig4.yml
- Group:
SHARE4_GROUP
- 配置格式:
YAML
- 配置內容:
share: config4: 這裡是共享配置文件4,Group:SHARE4_GROUP
創建成功頁面如下:
修改項目程式碼
1、在啟動類NacosConfigShareApplication.java
中新增如下程式碼
@Value("${share.config3}") private String shareConfig3; @Value("${share.config4}") private String shareConfig4; @RequestMapping("/getShare3") public String getShare3() { return shareConfig3; } @RequestMapping("/getShare4") public String getShare4() { return shareConfig4; }
2、修改項目配置文件bootstrap.yml
,增加ext-config
配置
spring: application: name: nacos-config-share cloud: nacos: discovery: server-addr: 127.0.0.1:8848 config: server-addr: 127.0.0.1:8848 prefix: ${spring.application.name} file-extension: yml shared-dataids: shareconfig1.yml,shareconfig2.yml refreshable-dataids: shareconfig1.yml,shareconfig2.yml ext-config: - data-id: shareconfig3.yml group: SHARE3_GROUP refresh: true - data-id: shareconfig4.yml group: SHARE4_GROUP refresh: true
啟動進行測試
項目經過修改後,可以看到
- 項目自身的nacos配置文件屬於DEFAULT_GROUP下,默認讀取
- shareconfig1.yml,shareconfig2.yml 都屬於DEFAULT_GROUP下,通過
shared-dataids
指定進行讀取 - shareconfig3.yml,shareconfig4.yml 都屬於
非DEFAULT_GROUP
下,通過ext-config
配置屬性進行自定義讀取
啟動項目,測試所有的配置文件是否可以正常讀取
訪問127.0.0.1:9984/getValue,返回:nacos-config-share 訪問127.0.0.1:9984/getShare1,返回:這裡是共享配置文件1 訪問127.0.0.1:9984/getShare2,返回:這裡是共享配置文件2這裡是共享配置文件2 訪問127.0.0.1:9984/getShare3,返回:這裡是共享配置文件3,Group:SHARE3_GROUP 訪問127.0.0.1:9984/getShare4,返回:這裡是共享配置文件4,Group:SHARE4_GROUP
修改shareconfig4.yml
的配置內容為:這裡是共享配置文件4,Group:SHARE4_GROUP,支援自動刷新
,保存後,再次調用127.0.0.1:9984/getShare4,返回如下:
這裡是共享配置文件4,Group:SHARE4_GROUP,支援自動刷新
調用介面後發現,兩種共享配置的載入方式都可以正常讀取,並且可以一起使用。ext-config
的方式實現了用戶自定義配置共享配置文件。
總結
上面的demo已經演示Nacos共享配置的兩種實現方式,兩種方式針對不同的場景,總結如下:
shared-dataids
方式:- 適合於共享配置文件與項目默認配置文件處於相同Group時,直接兩條命令就可以搞定
- 優點:配置方便
- 缺點:只能在同一Group中
ext-config
方式:- 它可以由開發者自定義要讀取的共享配置文件的DataId、Group、refresh屬性,這樣剛好解決了
shared-dataids
存在的局限性。 - 優點:可以與
shared-dataids
方案結合使用,用戶自定義配置。靈活性強 - 缺點:配置容易出錯,要熟悉YAML語法
- 它可以由開發者自定義要讀取的共享配置文件的DataId、Group、refresh屬性,這樣剛好解決了
可見兩種方式各有長處,所以如果在開發中需要使用共享配置,大家可以是具體情況而定選擇自己最合適的方案。
本文源碼:https://github.com/larscheng/larscheng-learning-demo/tree/master/Nacos
- 文章作者: LarsCheng
- 文章鏈接: 本文首發於個人部落格:https://www.larscheng.com/nacos-namespace/
- 發布方式:OpenWrite 最懂你的科技自媒體管理平台
- 版權聲明: 本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 LarsCheng’s Blog!