Nacos dataId
在 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
${spring.application.name}-${spring.profiles.active}.${file-extension}
微服务名称-当前环境-文件格式
搭建 Nacos 配置中心
1. 引入Nacos config 相关的新的依赖
2.创建bootstrap.properties .
3. 在Nacos 配置列表中创建 dataId ,及相关配置参数
4. 通过 Spring Cloud 原生注解 @RefreshScope
实现配置自动更新
1. Pom 引入Nacos config 相关的新的依赖
<dependency> <groupId> com.alibaba.cloud </groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config </artifactId> </dependency>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>demo</artifactId>
<groupId>com.springcloud</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>nacosconfig</artifactId>
<name>nacosconfig</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId> com.alibaba.cloud </groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config </artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.0.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.创建bootstrap.properties
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=dev
3. 在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 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
配置分组(Group)
Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。
配置集 ID(Data ID)
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_GROUP
Namespace空间方案
Namespace(命名空间)方案,默认此方案为public,此方案不能删除,我们现在来新建两个命名空间方案
- 新建 dev/test 的Namespace
- 此时我们就可以切换对应的命名空间,然后再通过Group和DataID来进行切换,如果想要切换命名空间,我们就需要通过命名空间ID来进行切换
- 按照域名配置(Namespace+Group+DataId)编写
# NameSpace 命名空间 切换不同环境的方案
spring.cloud.nacos.config.namespace=5643034b-26db-4723-893f-73e61bbb8bcc
剩下的 DataId 、以及 分组Group 创建同上面一样