在 Nacos Spring Cloud 中,dataId 的完整格式如下:
${prefix}-${spring.profiles.active}.${file-extension}
prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
spring.application.name = nacosClient spring.profiles.active = dev file-exetension = properties 那么 Nacos 的 dataId 即为: nacosClient-dev.properties
搭建 Nacos 配置中心${spring.application.name}-${spring.profiles.active}.${file-extension}
微服务名称-当前环境-文件格式
1. 引入Nacos config 相关的新的依赖
2.创建bootstrap.properties .
3. 在Nacos 配置列表中创建 dataId ,及相关配置参数
4. 通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新
1. Pom 引入Nacos config 相关的新的依赖com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config
2.创建bootstrap.properties4.0.0 demo nacosconfigcom.springcloud 0.0.1-SNAPSHOT nacosconfig Demo project for Spring Boot 1.8 org.springframework.boot spring-boot-starterorg.springframework.boot spring-boot-starter-testtest com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discoverycom.alibaba.cloud spring-cloud-starter-alibaba-nacos-configorg.springframework.cloud spring-cloud-starter-bootstrap3.0.1 org.springframework.boot spring-boot-maven-plugin
server.port=3377 spring.application.name=nacos-config-client management.endpoints.web.exposure.include=* #Nacos服务注册中心地址 spring.cloud.nacos.discovery.server-addr=localhost:8848 #Nacos作为配置中心地址 spring.cloud.nacos.config.server-addr=localhost:8848 # 指定环境 Nacos dataId 需要使用到此参数 spring.profiles.active=dev3. 在Nacos 配置列表中创建 dataId ,及相关配置参数
【注意】dataId 参数一定要拼凑正确。 配置的参数 config.info.name=SpringAlibaba Nacos Center V1.0.1.1 。可以通过@RefreshScope 获得
4. 通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新
@RestController
@RefreshScope //支持Nacos动态刷新功能
public class ConfigClientController {
//@RefreshScope实现配置自动更新,意思为如果想要使配置文件中的配置修改后不用重启项目即生效,可以使用@RefreshScope配置来实现
@Value("${config.info.name}")
private String name;
@GetMapping("/get")
public String getName(){
return name;
}
}
5. 启动项还是老样子
@SpringBootApplication @EnableDiscoveryClient
Nacos命名空间分组和DataID三者关系 命名空间(Namespace)
配置分组(Group) 用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
配置集 ID(Data ID) Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。
Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。
配置集:一组相关或者不相关的配置项的集合称为配置集。在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。
这三者的关系类似于Java里面的package名和类名,最外层的Namespace是可以用于区分部署环境的,Group和DataID逻辑上区分两个目标对象。
默认情况
Namespace=public,Group=DEFAULT_GROUP,默认Cluster是DEFAULT
基于 DataId 切换不同环境
指定spring.profile.active和配置文件的DataID来使不同环境下读取不同的配置,配置规则:默认空间+新建dev和test两个DataId:
1. 新建dev配置DataID
2. 新建test配置DataID
示例服务名称: spring.application.name=nacos-config-client dev配置DataID 的名称:nacos-config-client-dev.properties test配置DataID 的名称:nacos-config-client-test.properties
在项目中切换环境
#spring.profiles.active=dev #表示开发环境 spring.profiles.active=test #表示测试环境Group 方案切换不同环境
Group分组默认是:DEFAULT_GROUP,所以现在我们就需要分出两组,一组是“Dev开发组”,一组是“test测试组” 。
在同一个 DataID 下创建两个不同的 Group 组。
首先在Nacos上创建同一个 DataId ,但是Group组不一样,创建两个不同的组。
Bootstrap.properties 中配置 spring.cloud.nacos.config.group=DEV_GROUP 指定使用哪一个分组。同时要注意spring.profiles.active的值要与DataId 一致
# Group 切换不同环境的方案 spring.profiles.active=environment # spring.cloud.nacos.config.group 指定分组 spring.cloud.nacos.config.group=DEV_GROUP #spring.cloud.nacos.config.group=TEST_GROUPNamespace空间方案
Namespace(命名空间)方案,默认此方案为public,此方案不能删除,我们现在来新建两个命名空间方案
- 新建 dev/test 的Namespace此时我们就可以切换对应的命名空间,然后再通过Group和DataID来进行切换,如果想要切换命名空间,我们就需要通过命名空间ID来进行切换按照域名配置(Namespace+Group+DataId)编写
# NameSpace 命名空间 切换不同环境的方案 spring.cloud.nacos.config.namespace=5643034b-26db-4723-893f-73e61bbb8bcc
剩下的 DataId 、以及 分组Group 创建同上面一样



