Nacos做配置中心进阶
1.命名空间
用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等,还可以依据服务来划分(每个服务一个配置,只加载自己服务的配置)

默认新增的配置都在public空间(保留空间)


如要想使用上图的dev命名空间配置需在bootstrap.properties中添加如下配置,只能写唯一id不能写命名空间名称
#配置当前使用的配置中心命名空间
spring.cloud.nacos.config.namespace=fd89ad0d-8810-4f95-9cf2-a9a85e73aa35
测试访问

2.配置集
一组相关或者不相关的配置项的集合称为配置集。在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。说直白点,就是配置的集合(配置文件就是配置集)
3.配置集id
Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。相当于配置文件的文件名
4.配置分组
Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和MQ_topic 配置

若想使用dev配置分组,需在bootstrap.properties中添加如下配置
#配置当前使用的配置中心所属配置分组
spring.cloud.nacos.config.group=dev

启动项目访问测试

5.原理解析
5.1.自动注入:
NacosConfigStarter 实现了 org.springframework.cloud.bootstrap.config.PropertySourceLocator接口,并将优先级设置成了最高。在 Spring Cloud 应用启动阶段,会主动从 Nacos Server 端获取对应的数据,并将获取到的数据转换成 PropertySource 且注入到 Environment 的PropertySources 属性中,所以使用@Value 注解也能直接获取 Nacos Server 端配置的内容。
5.2. 动态刷新:
Nacos Config Starter 默认为所有获取数据成功的 Nacos 的配置项添加了监听功能,在监听到服务端配置发生变化时会实时触发org.springframework.cloud.context.refresh.ContextRefresher 的 refresh 方法 。如果需要对 Bean 进行动态刷新,请参照 Spring 和 Spring Cloud 规范。推荐给类添加@RefreshScope 或 @ConfigurationProperties 注解
6.加载多配置文件
6.1.datasource.yml

6.2.mybatis.yml

6.3.other.yml

datasource.yml+mybatis.yml+other.yml=application.yml
在bootstrap.properties配置如下
#加载datasource.yml
spring.cloud.nacos.config.ext-config[0].data-id=datasource.yml
spring.cloud.nacos.config.ext-config[0].group=dev
#是否动态刷新(默认false)
spring.cloud.nacos.config.ext-config[0].refresh=true
#加载mybatis.yml
spring.cloud.nacos.config.ext-config[1].data-id=mybatis.yml
spring.cloud.nacos.config.ext-config[1].group=dev
#是否动态刷新(默认false)
spring.cloud.nacos.config.ext-config[1].refresh=true
#加载other.yml
spring.cloud.nacos.config.ext-config[2].data-id=other.yml
spring.cloud.nacos.config.ext-config[2].group=dev
#是否动态刷新(默认false)
spring.cloud.nacos.config.ext-config[2].refresh=true
更多推荐
所有评论(0)