1、概念
命名空间(namespace):用于不同环境的配置隔离,例如开发环境、测试环境、生产环境。不同的命名空间下,可以存在相同名称的配置分组(Group)或配置集(Data ID)。默认的命令空间是public
配置分组(Group):配置分组是对配置集进行分组。不同的配置分组下可以有相同的配置集(Data ID)。当在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:可用于区分不同的项目或应用,例如:学生管理系统的配置集可以定义一个group为:STUDENT_GROUP。
配置集体(Data ID):在系统中,一个配置文件通常就是一个配置集,一个配置集可以包含了系统的各种配置信息。每个项目下往往有若干个工程,每个Data ID是一个工程的主配置文件。
2、详解
新建一个SpringBoot工程:study-nacos (要注意SpringCloud与SpringBoot的版本对应关系)
pom.xml
application.properties:
bootstrap.properties:
此时,该springboot项目会去127.0.0.1 nacos server中找namespace=dev、group=wms、Data ID=express-dev.properties的配置信息。
解释:
在 Nacos Spring Cloud 中,
dataId
的完整格式如下:${prefix}-${spring.profiles.active}.${file-extension}
prefix
默认为spring.application.name
的值,也可以通过配置项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
类型。
在nacos server中新建一个命名空间:dev
在dev命名空间下新建一个配置:Data Id=express-dev.properties Group=wms 配置项:yto.url=http://yto.com
现在来写一个测试的Controller: TestNacosController.java
启动项目,访问http://localhost:8888/nacos/getConfigs
返回:http://yto.com
读取配置成功
注意:
如果项目中没有指定Group与Namespace,那么回到默认的public命名空间下的默认组DEFAULT_GROUP查找配置
假设:spring.profiles.active=dev,spring.application.name=express
如果找到了express-dev.properties,那么会引用该配置,否则去找express.properties的配置,否则报错
当 spring.profiles.active 为空,dataId 的拼接格式变成 ${prefix} . ${file-extension}
当 spring.profiles.active 不为空,没找到 ${prefix} - ${spring.profiles.active} . ${file-extension},会找 ${prefix} . ${file-extension}
3、配置自动刷新
我们修改nacos server中的配置如下:
发布配置后,再次访问http://localhost:8888/nacos/getConfigs,发现还是返回http://yto.com.cn
通过 Spring Cloud 原生注解 @RefreshScope
实现配置自动更新
此时我们修改nacos server中的配置项,都会立即得到最新的配置。