本文參考文章:html
SpringCloud Alibaba - Nacos Config 自定義共享配置java
前景回顧:git
前幾章已經基本介紹了springcloud項目結合Nacos的大部分用法,本文介紹一下Nacos做爲配置中心時,如何讀取共享配置github
本文的項目Demo繼續沿用以前文章中的聚合工程Nacos
,若小夥伴尚未以前的環境,可至源碼地址中下載spring
一個項目中服務數量增長後,配置文件相應增長,多個配置文件中會存在相同的配置,那麼咱們能夠將相同的配置獨立出來,做爲該項目中各個服務的共享配置文件,每一個服務均可以經過Nacos進行共享配置的讀取bootstrap
下面用一個demo演示下,是否可行springboot
一如往常,仍是在聚合工程Nacos下建立名爲nacos-config-share
的子工程,其pom.xml文件依賴與以前的項目都一致,若是您沒有以前的項目可參考源碼地址app
一、修改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; } }
二、修改該項目的配置文件bootstrap.yml
spa
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
,詳細以下:
nacos-config-share.yml
YAML
server: port: 9984 nacos: share: nacos-config-share
建立共享配置文件1shareconfig1.yml
,詳細以下:
shareconfig1.yml
YAML
share: config1: 這裏是共享配置文件1
建立共享配置文件1shareconfig2.yml
,詳細以下:
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屬性
shareconfig3.yml
SHARE3_GROUP
YAML
share: config3: 這裏是共享配置文件3,Group:SHARE3_GROUP
shareconfig4.yml
SHARE4_GROUP
YAML
share: config4: 這裏是共享配置文件4,Group:SHARE4_GROUP
建立成功頁面以下:
一、在啓動類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; }
二、修改項目配置文件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
項目通過修改後,能夠看到
shared-dataids
指定進行讀取非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
方式:
ext-config
方式:
shared-dataids
存在的侷限性。shared-dataids
方案結合使用,用戶自定義配置。靈活性強可見兩種方式各有長處,因此若是在開發中須要使用共享配置,你們能夠是具體狀況而定選擇本身最合適的方案。
本文源碼:https://github.com/larscheng/larscheng-learning-demo/tree/master/Nacos