一.业务描述:
项目是分布式项目,需要将分服务中公共的模块抽取出来,成为一个公共的模块,不需要在每一个服务中配置,项目中使用的配置中心是nacos
二.了解nacos配置:
nacos官方文档:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
1. nacos基础配置
由官方文档,我们可知,关于nacos的配置,我们需要配置nacos server的地址和应用名
spring:
application:
name: aaa
cloud:
nacos:
config:
file-extension: yml
group: DEFAULT_GROUP
namespace: test
server-addr: 127.0.0.1:8848
username: nacos
password: nacos
spring:application:name: 是构成nacos配置管理dataId字段的一部分
在nacos spring cloud中,dataId的完整配置格式如下:
${prefix}-${spring.profiles.active}.${file-extension}
prefix默认值就是spring:application:name:的值,也可以通过配置
spring.cloud.nacos.config.prefix来配置
spring.profiles.active是当前对应的环境 如:开发环境dev 测试:test等,若遇到多套环境下的不
配置,可以通过该配置项来进行配置。当该值没有进行配置时,对应的-也不存在,dataId的拼接格式就成了
${prefix}.${file-extension}
file-exetension 为配置内容的数据格式,目前只支持properties 和 yaml 类型
3. nacos扩展属性:
官方文档:https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config
![](https://i-blog.csdnimg.cn/blog_migrate/dbd9f6574ff8ed943ac3cd71bba75e74.png)
3.1 extension-configs:
spring.application.name=aaa
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# config external configuration
# 1、Data Id 在默认的组 DEFAULT_GROUP,不支持配置的动态刷新
spring.cloud.nacos.config.extension-configs[0].data-id=ext-config-common01.properties
# 2、Data Id 不在默认的组,不支持动态刷新
spring.cloud.nacos.config.extension-configs[1].data-id=ext-config-common02.properties
spring.cloud.nacos.config.extension-configs[1].group=GLOBALE_GROUP
# 3、Data Id 既不在默认的组,也支持动态刷新
spring.cloud.nacos.config.extension-configs[2].data-id=ext-config-common03.properties
spring.cloud.nacos.config.extension-configs[2].group=REFRESH_GROUP
spring.cloud.nacos.config.extension-configs[2].refresh=true
注:
通过 spring.cloud.nacos.config.extension-configs[n].data-id 的配置方式来支持多个 Data Id 的配置。
通过 spring.cloud.nacos.config.extension-configs[n].group 的配置方式自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。
通过 spring.cloud.nacos.config.extension-configs[n].refresh 的配置方式来控制该 Data Id 在配置变更时,是否支持应用中可动态刷新, 感知到最新的配置值。默认是不支持的,配置refresh来控制是否自动刷新
注:多个 Data Id 同时配置时,它的优先级关系是 spring.cloud.nacos.config.extension-configs[n].data-id 其中 n 的值越大,优先级越高。
spring.cloud.nacos.config.extension-configs[n].data-id 的值必须带文件扩展名,文件扩展名既可支持 properties,又可以支持 yaml/yml。
此时 spring.cloud.nacos.config.file-extension 的配置对自定义扩展配置的 Data Id 文件扩展名没有影响。
3.2 shared-configs
配置支持共享的 Data Id
spring.cloud.nacos.config.shared-configs[0].data-id=common.yaml
# 配置 Data Id 所在分组,缺省默认 DEFAULT_GROUP
spring.cloud.nacos.config.shared-configs[0].group=GROUP_APP1
# 配置Data Id 在配置变更时,是否动态刷新,缺省默认 false
spring.cloud.nacos.config.shared-configs[0].refresh=true
注:
通过 spring.cloud.nacos.config.shared-configs[n].data-id 来支持多个共享 Data Id 的配置。
通过 spring.cloud.nacos.config.shared-configs[n].group 来配置自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。
通过 spring.cloud.nacos.config.shared-configs[n].refresh 来控制该Data Id在配置变更时,是否支持应用中动态刷新,默认false。
4.nacos配置的加载顺序:
${prefix}-${spring.profiles.active}.${file-extension}>${prefix}.${file-extension}>extension>share>本地的配置文件
三.操作:
我在实际配置的过程中,也可以这样进行配置,这样的话 extension-configs越靠后优先级越高,以下是以其中一个分服务(vcc)的配置为例,抽取公共的配置(每一个分服务中都应该添加extension-configs下面的这个配置)
解释:这个是在vcc分服务上,存在两个扩展配置文件,aaa.yml common.properties
读取文件的时候,先读取的是vcc-dev.yml的配置,然后读取aaa.yml,然后读取 common.properties 的配置。
spring:
cloud:
nacos:
config:
extension-configs:
- data-id: common.properties
group: DEFAULT_GROUP #分组是默认分组
refresh: true #动态刷新
- data-id: aaa.yml
group: DEFAULT_GROUP
refresh: true
## 配置文件后缀
file-extension: yml
group: DEFAULT_GROUP
namespace: test
## 文件名,如果没有配置则默认为 ${spring.appliction.name} + ${spring.profiles.active}
prefix: vcc
## 配置文件地址
server-addr: 127.0.0.1:8848
profiles:
active: dev