引入依赖
<!--nacos配置中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--开启Spring Cloud 应用程序启动时加载bootstrap配置文件-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.1.5</version>
</dependency>
添加配置文件bootstrap.yaml
spring:
application:
name: gulimall-coupon #服务名称
profiles:
active: dev #开发环境
cloud:
nacos:
server-addr: 127.0.0.1:8848
config:
file-extension: yaml #后缀名
namespace: d12064e0-e546-4482-b188-1233ed276a71 #命名空间id
group: coupon
这里会根据spring.cloud.nacos.server-addr
获取nacos地址,根据namespace
到指定的命名空间下,找到group
为coupon
的数据,并通过[服务名称]-[开发环境].后缀名
的格式作为Data id,即gulimall-coupon-dev.yaml
,来读取配置。
在application.yaml
中添加:
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 #nacos地址
application:
name: gulimall-coupon #服务名称
config:
import: nacos:bootstrap.yaml #引入bootstrap.yaml依赖
在Nacos添加一个命名空间dev,并创建配置文件gulimall-coupon-dev.yaml
Nacos Config 主要通过 dataId
和 group
来唯一确定一条配置。
Nacos Client 从 Nacos Server 端获取数据时,调用的是接口 ConfigService.getConfig(String dataId, String group, long timeoutMs)
在 Nacos Config Starter 中,dataId 的拼接格式如下:
[prefix]-[spring.profiles.active].[file-extension]
prefix
:默认为 spring.application.name
的值,即服务名称,也可以通过配置项 spring.cloud.nacos.config.prefix
来配置。spring.profiles.active
:为当前环境对应的profile
file-extension
为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension
来配置。注意,当 activeprofile
为空时,对应的连接符-
也将不存在。
dataId
的拼接格式变成prefix.file-extension
Group 默认为 DEFAULT_GROUP
,可以通过 spring.cloud.nacos.config.group
配置。
用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。
Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
一组相关或者不相关的配置项的集合称为配置集。在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。
Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。
Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。
配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。
NacosConfigStarter
实现了org.springframework.cloud.bootstrap.config.PropertySourceLocator
接口,并将优先级设置成了最高。
在 Spring Cloud 应用启动阶段,会主动从 Nacos Server 端获取对应的数据,并将获取到的
数据转换成 PropertySource
且注入到 Environment 的 PropertySources 属性中,所以使用
@Value
注解也能直接获取 Nacos Server 端配置的内容。
Nacos Config Starter
默认为所有获取数据成功的 Nacos 的配置项添加了监听功能,在监听
到服务端配置发生变化时会实时触发org.springframework.cloud.context.refresh.ContextRefresher
的 refresh
方法 。
如果需要对Bean
进行动态刷新,请参照 Spring 和 Spring Cloud 规范。推荐给类添加
@RefreshScope
或 @ConfigurationProperties
注解,
每个微服务创建自己的 namespace 进行隔离,group 来区分 dev,beta,prod 等环境