扩展配置(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)

Spring Cloud Alibaba 教程 | Nacos(五)的更多相关文章

  1. Spring Cloud Alibaba 教程 | Nacos(二)

    源码解析客户端注册过程 nacos作为注册中心,包含了nacos服务端(注册中心服务)和nacos客户端,nacos注册中心服务上面一讲已经介绍过了它是一个用Java语言编写开源web项目,并且拥有自 ...

  2. Spring Cloud Alibaba 教程 | Nacos(一)

    什么是Nacos Nacos是一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平台. Nacos 致力于帮助您发现.配置和管理微服务.Nacos提供了一组简单易用的特性集,帮助您快速实现动态 ...

  3. Spring Cloud Alibaba 教程 | Nacos(三)

    使用Nacos作为配置中心 前面我们已经介绍过滤Nacos是一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平台.所以它可以作为注册中心和配置中心,作为注册中心Nacos可以让我们灵活配置多 ...

  4. Spring Cloud Alibaba 教程 | Nacos(四)

    Nacos环境隔离 Nacos管理台有一个单独的菜单"命名空间",里面默认存在一个名为"public"的默认命名空间,我们在使用Nacos时不管是作为注册中心还 ...

  5. Spring Cloud Alibaba 教程 | Nacos(六)

    集群模式部署 前面我们已经学习了Nacos作为注册中心.配置中心的相关功能,但是我们之前启动Nacos是通过单实例模式启动的,只适合在学习和开发阶段,生产环境需要保证Nacos的高可用,所以今天我们来 ...

  6. Spring Cloud Alibaba 使用nacos 注册中心

    ### 背景 上一文我们讲到了如何去搭建注册中心,这一次我们讲述如何使用nacos作为注册中心 ### spring-cloud-alibaba-basis 创建基础依赖 首先我们创建一个spring ...

  7. Spring Cloud Alibaba(6)---Nacos持久化Mysql8.0版本

    Nacos持久化Mysql8.0版本 有关Nacos之前写过三篇文章. Spring Cloud Alibaba(3)---Nacos概述 Spring Cloud Alibaba(4)---Naco ...

  8. Spring Cloud Alibaba(2)---Nacos概述

    Spring Cloud Alibaba(2)---nacos概述 上一篇博客讲了有关 SpringCloudAlibaba的概述,这篇开始讲SpringCloudAlibaba组件之一---Naco ...

  9. Spring Cloud Alibaba(4)---Nacos(注册中心)

    Nacos(注册中心) 有关Spring Cloud Alibaba之前写过三篇文章. Spring Cloud Alibaba(1)---入门篇 Spring Cloud Alibaba(2)--- ...

随机推荐

  1. 一百零五、SAP中ALV事件之十七,让ALV表格修改后保存到数据库

    一.我们来到代码界面设置保存按钮的代码 二.i_grid_settings这个属性用来编辑单元格之后,返回给程序编辑后的值 三.我们双击点  'REUSE_ALV_GRID_DISPLAY',来到定义 ...

  2. 导出execl

    string filepath = Utils.GetMapPath("/upload/excel/"); filepath = filepath + fileName + &qu ...

  3. Java中的super关键字和this关键字作用介绍

    一.super关键字的作用 1.子类在构造方法中显示调用父类构造方法 super可以在子类的构造方法中显示调用父类的构造方法:并且这行代码必须出现在子类构造方法的第一行.原因:因为父类构造方法没有执行 ...

  4. Linux基础命令-02

    Linux基础命令-02:

  5. 面向对象第二个特征-继承(Inheritance)

    面向对象第二个特征-继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.java中的继承概述 1>.继承概述 多个类种存在相同属性和行为时,讲这 ...

  6. springboot + shiro+登录 微信登录 次数验证资料

    分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!大家可以看看是否对自己有帮助,点击查看教程. 1.https://blog.csdn.net/xtiawxf/article/details/5 ...

  7. js运用sort对json 数组进行排序

    Array.sort()方法是用来对数组项进行排序的 ,默认情况下是进行升序排列.sort() 方法可以接受一个 方法为参数. sort()排序时每次比较两个数组项都回执行这个参数,并把两个比较的数组 ...

  8. 1834 [ZJOI2010]network 网络扩容

    题解:先在原网络上跑最大流,然后加上带费用的边跑费用流 高一的时候做这道题怎么想不到? 注意:maxn代表的不一定是同一个变量的范围 #include<iostream> #include ...

  9. 十八、CI框架之数据库操作update用法

    一.代码如图: 二.访问一下 三.我们来查看数据库,已经被修改了 不忘初心,如果您认为这篇文章有价值,认同作者的付出,可以微信二维码打赏任意金额给作者(微信号:382477247)哦,谢谢.

  10. Swift—UITextField的基本用法

    https://www.jianshu.com/p/63bdeca39ddf 1.文本输入框的创建##### let textField = UITextField(frame: CGRect(x:1 ...