一、前言
Spring Cloud Alibaba Nacos Config
目前提供了三种配置能力从 Nacos
拉取相关的配置:
- A:通过内部相关规则(应用名、扩展名、
profiles
)自动生成相关的Data Id
配置 - B:通过
spring.cloud.nacos.config.extension-configs
的方式支持多个扩展Data Id
的配置 - C:通过
spring.cloud.nacos.config.shared-configs
支持多个共享Data Id
的配置
结论:当三种方式共同使用时,他们的一个配置优先级关系是:
A > B > C
对于
shared-configs
、extension-configs
的内部类Config
只有dataId
、group
、refresh
三个属性,完全不支持namespace
配置,配置拉取所需的namespace
参数来自spring.cloud.nacos.config.namespace
配置。
二、准备条件
基于上篇文章:Spring Cloud融合Nacos实现服务配置中心 | Spring Cloud 7为基础进行扩展。
三、nacos 多配置文件
3.1 配置展示
src/main/resources/bootstrap.yml
server:
port: 3001
spring:
profiles:
active: dev
application:
name: @artifactId@
cloud:
nacos:
username: @nacos.username@
password: @nacos.password@
config:
server-addr: 192.168.0.31:8848
prefix: @artifactId@
file-extension: yaml
namespace: public
# 用于共享的配置文件
shared-configs:
- data-id: common‐mysql.yaml
group: DEFAULT_GROUP
- data-id: common‐redis.yaml
group: DEFAULT_GROUP
- data-id: common‐base.yaml
group: DEFAULT_GROUP
# 用于扩展的配置文件
# extension-configs 优先级大于 shared-configs,在 shared-configs 之后加载
extension-configs:
- data-id: @artifactId@-advanced.yaml
group: DEFAULT_GROUP
refresh: true
- data-id: @artifactId@-base.yaml
group: DEFAULT_GROUP
refresh: true
config:
name: bootstrap
3.2 加载优先级
-
A:通过内部相关规则(应用名、扩展名、
profiles
)自动生成相关的Data Id
配置优先级最高 -
B:扩展配置(
extension-configs
) > 共享配置(shared-configs
) -
C:同为扩展配置,存在如下优先级关系:
extension-configs[3]
>extension-configs[2]
>extension-configs[1]
>extension-configs[0]
-
D:同为共享配置,存在如下优先级关系:
shared-configs[3]
>shared-configs[2]
>shared-configs[1]
>shared-configs[0]
3.3 关于refresh配置
扩展配置(extension-configs
) > 共享配置(shared-configs
)中配置动态刷新需主要事项:
Data Id
在默认的组DEFAULT_GROUP
,未配置refresh
属性或配置refresh: false
,不支持配置的动态刷新Data Id
在默认的组DEFAULT_GROUP
,配置refresh: true
,支持动态刷新Data Id
不在默认的组,未配置refresh
属性或配置refresh: false
,不支持配置的动态刷新Data Id
不在默认的组,配置refresh: true
,支持动态刷新
四、测试
启动服务前,nacos服务端完整配置列表如下:
启动服务查看获取的config.name
属性:
证明 3.2章节结论A正确
在nacos
服务端中删除nacos-config.yaml
、nacos-config-dev.yaml
配置,查看获取的config.name
属性:
证明 3.2章节结论B、C正确
在nacos
服务端中删除nacos-config-base.yaml
、nacos-config-advanced.yaml
配置,查看获取的config.name
属性:
证明 3.2章节结论D正确