Nacos配置文件的实用知识
1、入门
在spring cloud生态下使用nacos config很容易,引入pom依赖:
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
创建bootstrap.properties文件,并添加nacos server的连接地址即可:
spring.application.name=demo-api
spring.cloud.nacos.config.server-addr=nacos服务器地址
spring.cloud.nacos.config.prefix=nacos匹配配置前缀,默认为${spring.application.name}
2、配置文件 2.1. 规则配置
nacos上的dataId完整格式如下:
${prefix}-${spring.profile.active}.${file-extension}
- prefix:取自bootstrap配置文件里面
spring.cloud.nacos.config.prefix
的值,而该配置的默认值又为${spring.application.name} - spring.profile.active:取当前环境的profile。如果项目
spring.profile.active
为空,dataId格式变成${prefix}.${file-extension}
- file-exetension:为配置内容的数据格式,可以通过配置项
spring.cloud.nacos.config.file-extension
来配置。目前只支持 properties和yaml类型,默认properties。
${prefix}-${spring.profile.active}.${file-extension}
、${prefix}.${file-extension}
2.2. 共享配置
大一点的项目,通常需要将配置信息拆分成多个配置文件,如:数据库连接信息、多语言配置等。因此就存在了两种情况:
- 一个项目会加载多个配置文件。
- 多个项目会共享同一个配置文件。
shared-configs
或 extension-configs
,一直没发现二者之间有啥区别,作用和用法基本一样。例如:spring.cloud.nacos.config.shared-configs[0].data-id=mysql.properties
spring.cloud.nacos.config.shared-configs[0].group=DATABASE_GROUP
spring.cloud.nacos.config.shared-configs[1].data-id=redis.properties
spring.cloud.nacos.config.shared-configs[1].group=DATABASE_GROUP
spring.cloud.nacos.config.shared-configs[2].data-id=common-i18n.properties
spring.cloud.nacos.config.shared-configs[2].group=I18N_GROUP
spring.cloud.nacos.config.shared-configs[2].refresh=true
上述配置中,将 shared-configs[n] 替换成 extension-configs[n],并没有任何不同。
3. 优先级
1.配置文件优先级按照前面介绍的,在使用nacos后,项目的配置文件来源多了起来,按照
从高到低
的优先级顺序分别为:- 通过内部相关规则
${prefix}-${spring.profile.active}.${file-extension}
自动生成相关的Data Id配置。 - 通过
extension-configs
方式支持的Data Id配置。 - 通过
shared-configs
方式支持的Data Id配置。
2. 共享配置内部优先级共享配置
shared-configs[n]
、extension-configs[n]
内部,n
的值越大,优先级越高。前面的例子中优先级顺序:common-i18n.properties > redis.properties > mysql.properties
3. 本地优先级如果在配置文件中开启了nacos config,在nacos服务器和项目本地,都创建了同样的配置文件。nacos服务器上的配置项,优先级比本地高。
4. 通过日志查看优先级当你实在搞不清naco配置文件加载的优先级时,不要慌,直接看启动项目日志即可。
在spring项目中开启nacos config后,启动项目会在控制台打印出nacos加载的所有配置文件,而且按照优先级顺序从前往后排序。
【Nacos配置文件的实用知识】如按照前面的配置,打印出来的日志为:
[PropertySourceBootstrapConfiguration.java:112] [] [ ] - Located property source: [BootstrapPropertySource {name='bootstrapProperties-
demo-api-native.properties
,DEFAULT_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-demo-api.properties
,DEFAULT_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-demo-api
,DEFAULT_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-common-i18n.properties
,I18N_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-redis.properties
,DATABASE_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-mysql.properties
,DATABASE_GROUP'}]4. 项目规划 这里谈谈一个项目创建时,有关nacos config相关配置规划的想法。
1. 分配置文件项目本地配置文件的功能分类:
- bootstrap-{profile} :主要存放 nacos 的环境信息,不同环境下的nacos服务器地址可能不同。
- bootstrap :存放 nacos 与环境无关的基础信息,如 shared-configs[n]、extension-configs 等。
- application-{profile} :主要用于开发环境的配置,本地开发时有些参数不希望直接改公共的 nacos,可以在配置文件中修改。
- application :本地开发时,存放与环境无关的基础信息。
${prefix}-${spring.profile.active}.${file-extension}
为准。本地application
的作用及其有限,除非满足一些特殊的本地开发场景需求。2. 分环境虽然可以在一个nacos服务器上,通过
${prefix}-${spring.profile.active}.${file-extension}
来分环境,但不建议这么做。不同环境nacos的服务器健壮程度、安全保密程度等,都是有不同要求的。一般建议在一个nacos服务器上,根据不同环境,创建不同的namespace。甚至,根据不同环境,连接不同的nacos服务器。
3. 分项目通过 GROUP 来区分项目。而多个项目公用的一些配置,可独立出几个 GROUP,如:数据库连接配置、多语言配置等。
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量