用Nacos 当作注册中心,启动 应用之后, 接下来就学习 使用Nacos的 配置中心功能!
Nacos当作配置中心使用,配置简单,但是文档不是很好找。
配置参考官方wiki:https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config
本项目源码 git: https://github.com/xujianguo1/alicloud-demo.git
一、 配置&引入
1. pom 引入对应的starter
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>${nacos-boot-start.version}</version> </dependency>
2. 在resources下新建配置文件: bootstrap.properties , 根据springboot规范,文件名必须是bootstrap ,后缀可以是 properties、xml、yml、yaml的 一种。
配置文件填入基本内容:
1 server.name=server-product-demo 2 #tomcat端口号 3 server.port=8082 6 7 #应用名,不配置data-id 则默认为data-id前缀 8 spring.application.name=product-demo 9 #nacos配置信息 10 spring.cloud.nacos.config.server-addr=127.0.0.1:8848 11 #nacos 的dataId后缀 12 spring.cloud.nacos.config.file-extension=yml
再将其他配置,放入nacos 上面即可,nacos上配置示例:
在nacos上面,新建配置文件, dataId、group 是可以随意填写的,只要在同一个命名空间下, dataId + Group组合一起,不重复即可。
应用加载配置的时候,加载规则如下:
1. 未配置profile : 加载${spring.application.name}.${file-extension:properties} , 本例加载:product-demo.yml
2. 配置profile=dev , 在加载${spring.application.name}.${file-extension:properties} 配置文件后,
还要加载:${spring.application.name}-${profile}.${file-extension:properties}
这个配置文件,即:product-demo-dev.yml
如果未加载到,则控制台会报错, 加载到的配置文件,可以从以下2个地方查看:
1. 控制台日志,
2. springboot admin server的 Enviroment 里面查看。
二、 Nacos完整配置
在nacos 的控制台,server端的配置比较少。
Nacos Server端配置:
1. 可以新建不同 namespace ,在不同命名空间新建不同配置文件。
2. 新建配置文件,dataId +groupId 不同即可,文件内容自己填写。选择配置格式,可以触发相应的规则检查。
Nacos Client配置:
1 nacos: 2 server-address: 127.0.0.1 3 port: 8848 4 5 spring: 6 profiles: 7 active: prod #指定开发环境,profile 8 application: 9 name: order-demo #应用名,默认的dataId前缀 10 cloud: 11 nacos: 12 config: 13 server-addr: ${nacos.server-address}:${nacos.port} #nacos地址 14 file-extension: yml #应用扩展名. 15 shared-dataids: constants.yml,url-${spring.profiles.active}.yml #shareDataId 配置,dataIds是写死的,可以手动引入profile 16 ext-config[0].dataid: common.yml #ext-config[0] 的dataId,这里会直接查找common.yml ,profile配置不起作用 17 ext-config[0].group: common-config # ext-config[0] 的group 18 ext-config[1].dataid: ${spring.application.name}_biz.yml #配置ext-config[1]配置文件,不写group则用默认分组 19 ext-config[1].refresh: true #是否 动态刷新配置文件
- ext-config[n] 数字越大加载的优先级越高。
- 根据自身业务需求,可以配置多个ext-config。
- ext-config[n].data-id 的值是完整的dataId
- 集群环境和单机配置一样
# namespace 命名空间配置未列出,第三节讲
以上配置为 项目order-demo 的 client配置, profile = prod, 最终会加载的配置文件如下:
shared-dataids: constants.yml, url-prod.yml
ext1 : common.yml ,gourp=common-config
ext2: order-demo_biz.yml
默认:order-demo.yml
默认profile: order-demo-prod.yml
显示配置了4个文件,其实一共加载了6个文件,配置优先级依次递增。 即默认profile的 order-demo-prod.yml 里面配置优先级最高,会覆盖之前的配置。
官方文档里面内容如下:
三、多环境切换配置
一个系统,必然涉及到多套环境, 测试、开发、性能测试、预发、线上等环境。
Nacos 也是支持这2中配置的,支持的方式有2种 :
1. 通过spring.profile 方式支持。 例如 order-demo里面的 spring.profile.active=prod
2. 通过namespace 方式支持。 官方示例: spring.cloud.nacos.config.namespace=b3404bc0-d7dc-4855-b519-570ed34b62d7
设置Profile 方式:
如上 order-demo 示例, 可以设置profile ,然后再 配置里面 带上 ${spring.profiles.active} 即可,在启动应用的时候,设置profile参数,达到动态切换配置文件的目的。
profile 方式弊端:
1. 配置繁琐,
2.在同一个 命名空间下,文件数量过多,不方便查看
3.不利于后续的权限控制(虽然nacos目前还没有 权限控制功能,后续肯定会添加),nacos的权限控制计划时根据namespace的多租户方案
设置namespece方式(推荐):
nacos可以自定义多个namespace,在namespace下再自定义配置信息,如下:
如 product-demo所示,不配置profile, 在启动的时候 设置启动参数:
-Dspring.cloud.nacos.config.namespace=3df1f638-2297-411c-94ff-7382fd3327a0
Intelij 配置如下:
四、 其他
配置动态刷新
在client配置动态刷新后,代码里面还要配置 @RefreshScope ,@Value 注解的值才会更新。否则在Nacos 控制台修改了配置的值, 应用的日志里面也打印了 配置刷新信息,并且在SpringBoot AdminServer里面也看到了最 新的变更,但是在程序里面 值还是不会变化的。
Springboot Admin 显示buildInfo 信息:
能直观看到buildInfo信息,对线上排错是很方便的。 在将配置放入nacos,启动配置放入bootstrap.yml 后,自定义的info信息在 SpringBoot Admin Server里面就会失效,根据这篇blog设置,可以重新显示 相关的信息:https://blog.csdn.net/qq_26000415/article/details/79234812
Nacos配置使用比较简单,可能还要1、2项配置没用展示,大家可以根据官方文档摸索。
项目是个连续项目,nacos配置部分已打分支,后续会添加spring cloud的其他内容。
源码地址: https://github.com/xujianguo1/alicloud-demo.git 分支&Release:NacosConfig
如有其他问题或者疑难,欢迎留言,大家一起探讨!