需求描述:
- 项目有多套环境:dev,test,prod
- 每个环境的每个服务配置都不相同
- 项目可以通过切换环境加载环境的配置
nacos提供了以下三个概念
- 命名空间(Namespace): 环境隔离最大粒度隔离,**不同命名空间数据完全独立,**对应 dev /test/prod 三套环境
- **分组(Group):**配置分组同一环境内,按业务 / 模块分组,区分不同业务域(可选)
- **数据集(Data ID):**配置文件具体的配置文件,一个服务对应一个,对应每个微服务的配置文件
这三者的关系如下图所示:

命名空间区分不同环境,分组隔离不同业务,数据集代表配置
这里我们创建三个命名空间:

在三个命名空间中分别创建了4个配置

配置导入:
#配置命名空间
spring.cloud.nacos.config.namespace=dev
#从nacos获取配置,多个配置使用,分隔,指定分组使用group=xxx
spring.config.import=nacos:common.properties?group=order,nacos:database.properties?group=order
还有种情况,如果不同环境所需得配置文件数目不一样可以这么写:
java
# 服务端口
server:
port: 8000
spring:
profiles:
active: test
application:
name: servers-order
# nacos 配置
cloud:
nacos:
# 注册中心
discovery:
server-addr: 127.0.0.1:8848
group: em
cluster-name: ChenDu
# 配置中心
config:
#选取spring.profiles.active的值,没有默认选择dev
namespace: ${spring.profiles.active:dev}
#关闭导入检查
import-check:
enabled: false
# 开发环境
---
spring:
config:
activate:
on-profile: dev
import:
- nacos:common.properties?group=order
# 测试环境
---
spring:
config:
activate:
on-profile: test
import:
- nacos:database.properties?group=order
#生产环境
---
spring:
config:
activate:
on-profile: dev
import:
- nacos:common.properties?group=order
- nacos:database.properties?group=order
---是yaml提供的语法,可以把多个配置写进一个文件,使用时,通过spring.profiles.active的值来确定使用哪一个