Nacos动态刷新配置(二)
上篇讲了nacos注册发现的使用,这节我们来看下nacos配置服务。
从架构图可以看出,Nacos提供了两种服务, 一种是用于服务注册、发现的Naming Service,一种是用于配置中心、动态配置的Config Service,而他们底层均由core模块来支持。外层提供OpenAPI供客户端使用,并提供了User Console、Admin Console方便用户使用 。
配置中心搭建
添加依赖
这里我介绍的是基于上一篇【】的配置来的。
<!--nacos实现配置的动态变更-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
修改配置文件
创建bootstrap.yml文件
server:
port: 1001
spring:
application:
name: nacos-config
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
#file-extension: yml
users:
name: dev在路上的小蚂蚁
age: 16
如上图所示,配置信息,主要是application name和nacos的配置信息。
file-extension为配置内容的数据格式,可以支持 properties 和 yaml 类型。
我这里先按照默认的配置演示一下
编写读取配置类
编写控制层读取这两个属性值
读取方式不限,我这里是使用@Value来获取,示例如下:
值得注意的是需要加入注解:@RefreshScope,才能够实现动态刷新的配置效果。
先不进行配置,测试该接口获取的配置:
控制台配置
properties文件动态配置
在【配置管理】-【配置列表】里,创建配置文件。
配置文件命名方式
Data ID定义规则是:${prefix}-${spring.profiles.active}.${file-extension}
1)prefix 默认为 spring.application.name 的值,也可以通过配置项spring.cloud.nacos.config.prefix 来配置。
2)spring.profiles.active 即为当前环境对应的 profile,可以通过配置项 spring.profiles.active 来配置。
3)file-exetension 为配置内容的数据格式,默认是properties ,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 prefix.{prefix}.prefix.{file-extension}
比如,我们现在没有指定环境,先增加一个如:nacos-config.properties
按此步骤,发布即可。
再次刷新获取配置接口:
可以发现,我们的配置实时的更改了。
至此,nacos动态配置就实现了。
yml文件动态配置
上面说了,还支持yml文件动态配置,我们改造上面代码,上面说:file-exetension 为配置内容的数据格式,默认是properties,我们改为yml。
重启项目,先刷新获取配置测试接口:
还是原配置,接下来在控制台配置yml。
刷新测试接口
success!
指定环境动态配置
正常情况下开发环境和生产环境的配置肯定是不一样的,我们需要对指定环境进行响应的配置,当为开发环境是一套配置,生产环境是另一套配置。
这时我们需要指定运行环境
server:
port: 1001
spring:
application:
name: nacos-config
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
file-extension: yml
profiles:
active: dev
加入spring.profiles.active=dev指定运行环境
dev环境示例如下:
启动项目:http://localhost:1001/test/get
没问题,接下来增加配置,格式为:${prefix}-${spring.profiles.active}.${file-extension}
再次获取配置
dev配置生效,我再测试下配置prod环境会不会生效。
增加prod配置
现在运行的是dev环境,新建prod配置。
获取配置信息
结论:发现nacos可以根据运行环境来配置不同环境的配置信息。你学会了吗?
nacos服务完整示例代码已上传gitee:
https://gitee.com/sshengwei/ssw-record-project/tree/master/spring-cloud-alibaba-demo