一、Nacos 配置中心核心属性
在学习nacos 作为配置中心的使用之前,先看下Nacos 作为配置中心时的三个属性,即:
命名空间、配置分组、配置集ID(习惯称为配置文件ID);在使用Nacos 作为配置中心
的过程中可以通过这3个属性对配置文件进行隔离。
在项目中通常通过 命名空间、配置分组和 Data ID 来唯一确定要使用的配置文件。
1、命名空间(Namespace )
用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的
配置文件。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境
和生产环境的资源(如配置、服务)隔离等。
2、配置分组(Group)
Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade
)对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,
如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常
见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。
3、配置集ID(Data ID)
Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。
Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集
都可以被一个有意义的名称标识。
配置集:一组相关或者不相关的配置项的集合称为配置集。在系统中,一个配置文件通常就是
一个配置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、
日志级别等配置项。
Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局
唯一性。 此命名规则非强制。在实际工作中 Data ID 的命名一般遵守下面的格式:
${prefix}-${spring.profiles.active}.${file-extension}
解释:
prefix:Nacos配置文件的前缀,默认是 “spring.application.name” 的值,也可以通过
nacos配置项 “spring.cloud.nacos.config.prefix” 来配置
spring.profiles.active:即为当前环境对应的 profile,
注意:当 “spring.profiles.active” 为空时,对应的连接符 “-” 也将不存在,
dataId 的拼接格式变成 “${prefix}.${file-extension}”
file-exetension:为配置文件的格式,可以通过配置项
“spring.cloud.nacos.config.file-extension” 来配置。
目前只支持 “properties” 和 “yaml” 类型。
4、Namespace、Group 和 Data ID 三者之间的关系?
Namespace、Group 和 Data ID 这三者之间类似于Java里面的package名和类名,最外层的
Namespace是可以用于区分部署环境的,Group和DataID逻辑上区分两个目标对象;
如下图所示:
Nacos默认的命名空间是public,我们就可以利用Namespace来实现隔离,比如我们现在有三
个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之
间是隔离的。
Group本身就是分组的意思,它可以把不同的微服务划分到同一个分组里面去。Group 默认
是 DEFAULT_GROUP
剩下的就是具体微服务,一个Service可以包含多个Cluster,Nacos默认Cluster是DEFAULT,
Cluster是对指定微服务的一个虚拟划分。比如说,将一个Service部署在北京和和上海的机房
中,北京机房的Service就可以起名为(BJ),杭州机房中的Service就可以起名为(SH),
这样就可以尽量让同一个机房的微服务互相调用,提升性能。
通过 Namespace、Group 和 Data ID 可以实现配置文件的隔离和动态切换
二、Nacos 作为配置中心使用步骤
1、引入 Nacos Config 依赖,
2、在项目的配置文件中配置Nacos 配置中心地址、配置文件类型以及“spring.profiles.active”,
“spring.profiles.active” 是为了后边Data ID 的取值。
注意:在springBoot 项目中我们常用的配置文件是application.yml,但配置文件application的
优先级比较低;但项目启动初始化时就需要拉取配置,若将nacos 配置中心信息配置在
application中,此时可能会出现application还没开始执行配置获取不到而导致项目启动
报错,所以我们需要把Nacos 配置中心信息配置到比application优先级更高的配置文件
bootstrap.yml;
nacos 作为配置中心时一般需要2个配置文件,即:bootstrap.yml、 application.yml;
bootstrap.yml 用于去Nacos中读取指定后缀为yaml的配置文件,application.yml 用于
配置其他信息,如配置:spring.profiles.active
配置内容如下:
server:port: 3377
#配置文件的加载的优先级 boootstrap.yml 高于 application,
#项目需要先拉取配置才能正常启动,所以 nacos 作为配置中心的配置最好放在 boootstrap 文件中
spring:application:name: nacos-config-clientcloud:#配置nacosnacos:#配置 “nacos配置中心”config:server-addr: 47.117.80.49:8848file-extension: yaml #指定拉取的配置文件的后缀
4、在Nacos 平台创建配置文件
在浏览器访问 http://localhost:8848/nacos 进入Nacos 平台,进入“配置管理—>配置列表”
页面来创建配置文件,如下图所示:
通过上边介绍Data ID 命名规则 与 当前项目中的配置项 “spring.application.name
(nacos-config-client)”、 “spring.profiles.active(dev)” 、“file-extension” 可以推导
出当前配置文件的Data ID 应该是 “nacos-config-client-dev.yaml”,推到过程如下图所示:
新建配置文件时,分组Group 默认是 “DEFAULT_GROUP”,但分组Group的值是可以修改的,
可以根据自己的要求来求改Group的值,不同的Group下允许Data ID 相同的配置文件;
配置内容如下:
5、测试,验证Nacos 中的配置文件是否生效
创建测试类 ConfigController,通过spring 原生注解 @Value 将nacos 配置文件中的配置项
映射到属性 configInfo 上。
注意:注解 @Value 不支持配置的动态刷新,但可以通过 @RefreshScope+@Value 的方式
来实现配置的动态刷新;
在高版本的spring cloud alibaba nacos config 中,nacos 原生注解 @NacosValue (动
态获取配置nacos配置文件值,支持动态刷新)不生效,官方支持使用spring cloud 原生
注解 @Value+@RefreshScope 的方式实现配置的动态刷新
测试代码如下:
/***************************************************** 在通过主机@Value 把配置文件的配置项与类中的属性绑定时,可以通过注解 @RefreshScope 实现配置的动态* 刷新** @author * @date 2025/6/16 15:06****************************************************/
@RefreshScope
@RestController
public class ConfigController {@Value("${config.info}")private String configInfo;/*** todo 注意:* 在高版本的spring cloud alibaba nacos config 中,nacos 原生注解 @NacosValue (动态获取配置nacos配置文件值,支持动态刷新)* 不生效,官方支持使用spring cloud 原生注解 @Value+@RefreshScope 的方式实现配置的动态刷新*///@NacosValue(value = "${config.info}",autoRefreshed = true)private String config;@GetMapping("/config/info")public String test(){System.out.println(" config = "+config);System.out.println(" configInfo = "+configInfo);return this.configInfo;}
}
测试结果:
在浏览器访问 “http://localhost:3377/config/info” ,页面成功打印
“nacos-config-client-dev.yaml” 中的配置项,如下图所示:
三、通过 Namespace、Group 和 Data ID 实现Nacos 配置文件的动态切换
1、通过Data ID 动态切换配置文件
根据前边 Data ID 的命名规则我们知道,在该方案中一般是修改 “spring.profiles.active” 的
值来动态切换不同环境的配置文件
步骤:
1)在 public 命名空间下新增配置文件 “nacos-config-client-test.yaml”,并设置该配置文
件的分组与 配置文件 “nacos-config-client-dev.yaml” 相同,即都是
“DEFAULT_GROUP”,如下所示:
2)配置文件application.yml 中的配置项 “spring.profiles.active” 配置内容如下图所示:
nacos config 配置内容如下:
3)测试
通过修改配置文件application.yml 中的配置项 “spring.profiles.active” 来动态读取不同
环境的配置文件,
2次访问 “http://localhost:3377/config/info ” 测试结果如下所示如下图所示:
(1)dev 开发环境
(2)test 测试环境
2、通过 Group 动态切换配置文件
根据之前的讲解我们都知道Group为分组默认是:DEFAULT_GROUP,所以现在我们就需要
分出两组,一组是“DEFAULT_GROUP”,一组是“DEFAULT_INFO”
而且根据前边的了解我们知道,Group分组只能在创建配置文件时指定。
步骤:
1)新创建 Data ID 为 “nacos-config-client-dev.yaml” 的配置文件,并指定该文件的所属
分组是 “DEFAULT_INFO”,如下图所示:
这样在Nacos 配置列表中就存在2个DataID同为 “nacos-config-client-dev.yaml” 但分组
不一样的配置文件,如下图所示:
2)在配置文件 bootstrap.yml 中的 Nacos 配置中心的配置中增加配置项 “group”,
group 表示读取那个分组下的配置文件,group 若不配置则默认读取 分组
“DEFAULT_GROUP” 中的配置文件,配置内容如下:
3)测试
通过修改 配置文件 bootstrap.yml 中配置项 "group" 的值来观察访问
“http://localhost:3377/config/info ” 的输出情况,测试结果如下:
(1)DEFAULT_GROUP 分组测试结果:
(2)DEFAULT_INFO 分组测试结果
3、通过 Namespace 动态切换配置文件
在Nacos 管理平台,进入“命名空间”页面,发现此时已经存在一个名称为“public”的命名空间;
public 是Nacos 默认的命名空间,不可编辑和删除(自己创建的命名空间可以编辑和删除);
如下图所示:
验证 “通过 Namespace 动态切换配置文件” 则需要至少2个命名空间,所以我们还需要先新建
一个命名空间
步骤:
1)新创建命名空间
在命名空间页面,点击按钮“新建命名空间” 来创建命名空间,如下图所示:
2)在新加的命名空间 “DEV”中新增配置文件 “nacos-config-client-dev.yaml”,并设置分组
Group 与 命名空间public 下的同 Data ID 的配置文件的分组一致,
即分组Group=DEFAULT_GROUP,如下图所示:
3)修改nacos 配置中心配置
在配置文件 bootstrap.yml 中的 Nacos 配置中心的配置中增加配置项 “namespace”,
namespace 指定配置文件所在的命名空间,若不配置,默认是Ncos 保留的命名
空间 public;在Nacos 中通过${namespace}.${group}.${dataId}.${文件格式}来唯一
确定配置文件,配置内容如下:
bootstrap.yml 中 的配置内容如下:
server:port: 3377
#配置文件的加载的优先级 boootstrap.yml 高于 application,
#项目需要先拉取配置才能正常启动,所以 nacos 作为配置中心的配置最好放在 boootstrap 文件中
spring:application:name: nacos-config-clientcloud:#配置nacosnacos:#配置 “nacos配置中心”config:server-addr: 47.117.80.49:8848file-extension: yaml #指定拉取的配置文件的后缀#指定配置文件的分组,若不配置默认是 DEFAULT_GROUP#不同的分组可以存在DataId 相同的配置文件group: DEFAULT_GROUP#group: DEFAULT_INFO#指定配置文件所在的命名空间,若不配置,默认是Ncos 保留的命名空间 public#${namespace}.${group}.${dataId}.${文件格式}来唯一确定配置文件namespace: 01edc802-425e-4c4e-828e-a28d079051ad#配置nacos 服务注册中心discovery:server-addr: 47.117.80.49:8848
4)测试
通过修改 配置文件 bootstrap.yml 中配置项 "namespace" 的值来观察访问
“http://localhost:3377/config/info ” 的输出情况,测试结果如下:
(1)默认命名空间public 测试结果
(2)命名空间DEV 测试结果