Spring Cloud Alibaba 教程 | Nacos(五)


擴展配置(extended configurations)

通過之前的學習,我們知道應用引入nacos配置中心之后默認將會加載Data ID= ${prefix} - ${spring.profiles.active} . ${file-extension} 默認Group為public的配置文件,並且可以通過下面三個參數指定修改默認的配置文件:

  • spring.cloud.nacos.config.prefix
  • spring.cloud.nacos.config.file-extension
  • spring.profiles.active

有時候一個模塊項目需要多個配置文件,這時候我們就可以使用nacos的擴展配置參數(extended configurations)引用同一個namesapce下面更多的配置文件。

第一步:創建多個配置文件。我們在默認的namespace下創建了三個配置文件,其中nacos-consumer.properties配置在默認的組DEFAULT_GROUP,database.properties和log.properties則配置在Group_A組里。

  • database.properties配置內容是:database.url=127.0.0.1
  • log.properties配置配置內容是:log.data=/home/logs
  • consumer.properties配置配置內容是:config.address=shanghai

在這里插入圖片描述
第二步:應用引入nacos注冊中心,加載多個配置文件。

<!--注冊中心-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
spring:
  application:
    name: nacos-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.0.127:8848 #注冊中心地址
      config:
        server-addr: 192.168.0.127:8848 #配置中心地址
        ext-config: #可以加載同一個namespace下面的不同group的多個配置文件
          - data-id: database.properties
            group: GROUP_A
            refresh: true
          - data-id: log.properties
            group: GROUP_A
            refresh: true

server:
  port: 17358

ext-config配置是一個數組List類型,每個配置中包含三個參數:data-id、group,refresh。其中refresh參數用於控制這個配置文件中的內容時候是否支持自動刷新,默認情況下,只有默認加載的配置才會自動刷新,對於這些擴展的配置加載內容需要配置該設置時候才會實現自動刷新。

第三步:使用配置參數,驗證結果。

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumer {

    public static void main(String[] args) {
        SpringApplication.run(NacosConsumer.class,args);
    }

    @RefreshScope
    @RestController
    public class TestController {

        @Value("${config.address}")
        private String address;

        @Value("${database.url}")
        private String url;

        @Value("${log.data}")
        private String data;

        @GetMapping("/getConfig")
        public String getConfig() {
            return "address:"+address+" url:"+url+" data:"+data;
        }

    }

}

在這里插入圖片描述

共享配置(shared configurations)

上面的擴展配置實際上是一種namesapce下的共享配置,根據上一篇文章環境隔離的經典案例划分,就是一種企業內各項目之間的共享配置。有時候我們希望有些配置文件只在同一個項目下的不同的環境之間共享(實際上是一種group下的共享配置),這時候就可以使用Nacos的共享配置(shared configurations)去實現。在這里插入圖片描述
添加一個內容為database.url=127.0.0.2的新的配置文件database.properties,Group為DEFAULT_GROUP。
在這里插入圖片描述

spring:
  application:
    name: nacos-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.0.127:8848 #注冊中心地址
      config:
        server-addr: 192.168.0.127:8848 #配置中心地址
        ext-config: #可以加載同一個namespace下面的不同group的多個配置文件
          - data-id: database.properties
            group: GROUP_A
            refresh: true
          - data-id: log.properties
            group: GROUP_A
            refresh: true
        #可以加載當前group下面的多個配置文件
        shared-dataids: database.properties
        refreshable-dataids: database.properties

server:
  port: 17358

在這里插入圖片描述
我們發現結果是相同的,首先我們先來看下應用加載這些配置文件的順序,可以從控制台看到配置的文件的加載順序:

Loading nacos data, dataId: 'database.properties', group: 'DEFAULT_GROUP'
Loading nacos data, dataId: 'database.properties', group: 'GROUP_A'
Loading nacos data, dataId: 'log.properties', group: 'GROUP_A'
Loading nacos data, dataId: 'nacos-consumer.properties', group: 'DEFAULT_GROUP'

1、先加載shared-dataids配置
2、再加載ext-config配置
3、最后加載默認配置

因為shared-dataids配置被最先加載,所以后面的ext-config配置會覆蓋前面的配置,所以導致新增加的database.properties沒有起作用。
刪掉group為GROUP_A的database.properties文件之后,屏蔽掉相關配置,重啟應用結果就會發生改變。

spring:
  application:
    name: nacos-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.0.127:8848 #注冊中心地址
      config:
        server-addr: 192.168.0.127:8848 #配置中心地址
        ext-config: #可以加載同一個namespace下面的不同group的多個配置文件
         # - data-id: database.properties
         #   group: GROUP_A
         #   refresh: true
          - data-id: log.properties
            group: GROUP_A
            refresh: true
        #可以加載當前group下面的多個配置文件
        shared-dataids: database.properties
        refreshable-dataids: database.properties

server:
  port: 17358

在這里插入圖片描述

關注公眾號了解更多原創博文

![Alt](https://img-blog.csdnimg.cn/20191104123907694.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA3Mzk1NTE=,size_16,color_FFFFFF,t_70#pic_center =591x339)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM