Nacos(七):Nacos共享配置

前言

本文參考文章:html

SpringCloud Alibaba - Nacos Config 自定義共享配置java

前景回顧:git

前幾章已經基本介紹了springcloud項目結合Nacos的大部分用法,本文介紹一下Nacos做爲配置中心時,如何讀取共享配置github

個人環境

  • 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,若小夥伴尚未以前的環境,可至源碼地址中下載spring

場景描述

一個項目中服務數量增長後,配置文件相應增長,多個配置文件中會存在相同的配置,那麼咱們能夠將相同的配置獨立出來,做爲該項目中各個服務的共享配置文件,每一個服務均可以經過Nacos進行共享配置的讀取bootstrap

下面用一個demo演示下,是否可行springboot

  • demo工程:nacos-config-share
  • 配置文件:nacos-config-share.yml
  • 共享配置文件:shareconfig1.yml,shareconfig2.yml

建立項目

一如往常,仍是在聚合工程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.ymlspa

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

建立成功後,配置列表以下圖:

shareconfig

啓動測試

直接啓動項目,若是啓動成功。能夠看到日誌中以下信息:

startup

訪問啓動類中提供的接口,測試下可否獲取到共享配置文件中的值

訪問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-dataidsrefreshable-dataids是能夠實現共享配置文件的讀取和自動刷新的。

需求變動

假設如今要讀取shareconfig3.ymlshareconfig4.yml文件可是它的Group爲SHARE3_GROUPSHARE4_GROUP, 即共享配置文件與項目自身配置文件不在同一Group中(上邊的例子是全都在DEFAULT_GROUP分組) 那若是繼續用上邊的方法,就沒法讀取共享配置文件

這時可使用另外一個配置ext-config,它能夠由用戶自定義指定須要加載的配置DataID、Group以及是否自動刷新

而且ext-config是一個集合(List),支持多個配置文件的指定。

新建共享配置文件

先建立配置配置文件shareconfig3.ymlshareconfig4.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

建立成功頁面以下:

shareconfig34

修改項目代碼

一、在啓動類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

啓動進行測試

項目通過修改後,能夠看到

  1. 項目自身的nacos配置文件屬於DEFAULT_GROUP下,默認讀取
  2. shareconfig1.yml,shareconfig2.yml 都屬於DEFAULT_GROUP下,經過shared-dataids指定進行讀取
  3. 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語法

可見兩種方式各有長處,因此若是在開發中須要使用共享配置,你們能夠是具體狀況而定選擇本身最合適的方案。

本文源碼https://github.com/larscheng/larscheng-learning-demo/tree/master/Nacos


相關文章
相關標籤/搜索