您现在的位置是:首页 > 正文

Nacos配置的多文件加载与共享配置

2024-02-01 05:03:28阅读 3

目录

一、概述

二、加载多个配置

三、共享配置


一、概述

对于Nacos作为配置中心的使用,通过之前的几篇博文,我们已经介绍了如何在Nacos中创建配置内容、Nacos配置内容与Spring应用配置之间的对应关系以及实战中多环境下的配置管理方案。

但是,我们实际应用过程中还会经常碰到这样的问题:有时候我们会对应用的配置根据具体作用做一些拆分,存储在不同的配置文件中,除了归类不同的配置之外,也可以便于共享配置给不同的应用。对于这样的需求,Nacos也可以很好的支持,下面就来具体介绍一下,当使用Nacos时,我们如何加载多个配置,以及如何共享配置。


二、加载多个配置

通过之前的学习,我们已经知道Spring应用对Nacos中配置内容的对应关系是通过下面三个参数控制的:

spring.cloud.nacos.config.prefix
spring.cloud.nacos.config.file-extension
spring.cloud.nacos.config.group

默认情况下,会加载Data ID=${spring.application.name}.properties,Group=DEFAULT_GROUP的配置。

举例说明

假设现在有这样的一个需求:我们想要对所有应用的Actuator模块以及日志输出做统一的配置管理。所以,我们希望可以将Actuator模块的配置放在独立的配置文件actuator.properties文件中,而对于日志输出的配置放在独立的配置文件log.properties文件中。通过拆分这两类配置内容,希望可以做到配置的共享加载与统一管理。

这时候,我们只需要做以下两步,就可以实现这个需求:

  1. 第一步:在Nacos中创建Data ID=actuator.properties,Group=DEFAULT_GROUP和Data ID=log.properties,Group=DEFAULT_GROUP的配置内容。

  1. 第二步:在Spring Cloud应用中通过使用spring.cloud.nacos.config.ext-config参数来配置要加载的这两个配置内容,比如:
    spring.cloud.nacos.config.ext-config[0].data-id=actuator.properties
    spring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUP
    spring.cloud.nacos.config.ext-config[0].refresh=true
    spring.cloud.nacos.config.ext-config[1].data-id=log.properties
    spring.cloud.nacos.config.ext-config[1].group=DEFAULT_GROUP
    spring.cloud.nacos.config.ext-config[1].refresh=true

可以看到,spring.cloud.nacos.config.ext-config配置是一个数组List类型。每个配置中包含三个参数:data-id、group,refresh;前两个不做赘述,与Nacos中创建的配置相互对应,refresh参数控制这个配置文件中的内容时候支持自动刷新,默认情况下,只有默认加载的配置才会自动刷新,对于这些扩展的配置加载内容需要配置该设置时候才会实现自动刷新。


三、共享配置

通过上面加载多个配置的实现,实际上我们已经可以实现不同应用共享配置了。但是Nacos中还提供了另外一个便捷的配置方式,比如下面的设置与上面使用的配置内容是等价的:

spring.cloud.nacos.config.shared-dataids=actuator.properties,log.properties
spring.cloud.nacos.config.refreshable-dataids=actuator.properties,log.properties

    spring.cloud.nacos.config.shared-dataids 参数用来配置多个共享配置的Data Id,多个的时候用用逗号分隔
    spring.cloud.nacos.config.refreshable-dataids 参数用来定义哪些共享配置的Data Id在配置变化时,应用中可以动态刷新,多个Data Id之间用逗号隔开。如果没有明确配置,默认情况下所有共享配置都不支持动态刷新

配置加载的优先级

当我们加载多个配置的时候,如果存在相同的key时,我们需要深入了解配置加载的优先级关系。

在使用Nacos配置的时候,主要有以下三类配置:

    A: 通过spring.cloud.nacos.config.shared-dataids定义的共享配置
    B: 通过spring.cloud.nacos.config.ext-config[n]定义的加载配置
    C: 通过内部规则(spring.cloud.nacos.config.prefix、spring.cloud.nacos.config.file-extension、spring.cloud.nacos.config.group这几个参数)拼接出来的配置

要弄清楚这几个配置加载的顺序,我们从日志中也可以很清晰的看到,我们可以做一个简单的实验:

spring.cloud.nacos.config.ext-config[0].data-id=actuator.properties
spring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUP
spring.cloud.nacos.config.ext-config[0].refresh=true
spring.cloud.nacos.config.shared-dataids=log.properties
spring.cloud.nacos.config.refreshable-dataids=log.properties

 

根据上面的配置,应用分别会去加载三类不同的配置文件,启动应用的时候,将会在日志中看到如下输出: 

    2019-02-08 21:23:02.665  INFO 63804 --- [main] o.s.c.a.n.c.NacosPropertySourceBuilder   : Loading nacos data, dataId: 'log.properties', group: 'DEFAULT_GROUP'
    2019-02-08 21:23:02.671  INFO 63804 --- [main] o.s.c.a.n.c.NacosPropertySourceBuilder   : Loading nacos data, dataId: 'actuator.properties', group: 'DEFAULT_GROUP'
    2019-02-08 21:23:02.677  INFO 63804 --- [main] o.s.c.a.n.c.NacosPropertySourceBuilder   : Loading nacos data, dataId: 'alibaba-nacos-config-client.properties', group: 'DEFAULT_GROUP'

后面加载的配置会覆盖之前加载的配置,所以优先级关系是:A < B < C 

网站文章

  • MakeFile中文手册(免费下载)-徐海兵整理

    MakeFile中文手册(免费下载)-徐海兵整理

    截图一张 点击下载

    2024-02-01 05:03:20
  • 静态代理与动态代理

    1、代理模式的原理:使用一个代理将对象包装起来,然后用该代理对象取代原始对象,任何对原始对象的调用都要通过代理。代理对象决定是否以及何时将方法调用转到原始对象上2、静态代理实现Runnable接口的方...

    2024-02-01 05:03:12
  • 【备战金九银十】2023年最全Android岗1000+面试题及答案

    【备战金九银十】2023年最全Android岗1000+面试题及答案

    马上又准备迎接金九银十了,各大厂,国央企纷纷加入抢人大战竞争尤为激烈!但是,相比求职者来说岗位数量还不是很多,自然而然 HR 们就开始优中选优,激化“内卷”!如何在众多面试者中脱颖而出?对于很多程序员来说是目前最重要的事。因此本篇通过收集腾讯T4总结的2023年最全的Android岗1000+面试题及答案,旨在为大家提供重要参考,帮助你更好地准备新的面试。

    2024-02-01 05:02:44
  • First image then video A two-stage network for spatiotemporal video denoising

    First image then video A two-stage network for spatiotemporal video denoising

    问题:现存的去噪算法容易,即当对象快速移动时,光流计算失误,造成运动对象的边界会变得模糊关于运动模糊的说明:the boundary of a moving object tends to appea...

    2024-02-01 05:02:37
  • Django之ORM操作

    **Queryset数据类型** QuerySet与惰性机制 所谓惰性机制:Publisher.objects.all()或者.filter()等都只是返回了一个QuerySet(查询结果集对象),它...

    2024-02-01 05:02:29
  • 2_5_LeetCode刷题总结(基本算法)动态规划

    2_5_LeetCode刷题总结(基本算法)动态规划

    编程总结 每每刷完一道题后,其思想和精妙之处没有地方记录,本篇博客用以记录刷题过程中的遇到的算法和技巧 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。 注意你不能在买入股票前卖出股票。 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = 1)的时...

    2024-02-01 05:02:21
  • 浅显易懂的《C++类和对象》-中篇

    内容充实、概念易懂,C++类和对象中篇,类的6个默认成员函数,轻松掌握。

    2024-02-01 05:01:51
  • 「Active Directory Sec」白银票据和黄金票据

    「Active Directory Sec」白银票据和黄金票据

    白银票据: 即伪造的TGS。当获取需要访问的目标服务器NTLM HASH后,就可以利用Mimikatz伪造TGS,直接去访问目标服务器。此过程不需要KDC的参与。但缺点是只能访问一个服务。黄金票据: ...

    2024-02-01 05:01:44
  • Day3.数据可视化-- 可视化基础

    Day3.数据可视化-- 可视化基础

    可视化主要是以图像来展示数据间的关系,常见的图形种类有折线图,散点图,条形图,直方图,饼图。此外在接下来课程中还会用到箱线图,热力图,蜘蛛图,表示二元变量分布和成对关系的视图。学好可视化...

    2024-02-01 05:01:37
  • C++ 内存分区: 代码区 全局区 栈区 堆区

    C++ 内存分区: 代码区 全局区 栈区 堆区

    1.代码区: 存放函数体的二进制代码,由操作系统进行管理 **2.全局区:**存放全局变量和静态变量以及常量,数据在程序结束后由操作系统释放 存放内容:全局变量、静态变量、常量区(字符串常量和其他常量) **3.栈区:**由编译器分配和释放,存放函数的参数值,局部变量等 **4.堆区:**由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收 ...

    2024-02-01 05:01:10