环境:Nacos 1.4.2
什么是Nacos
一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
通俗解释就是:Nacos是一个注册中心&配置中心
关于Nacos注册中心的功能,在Nacos注册中心实战篇中,阿鉴已经给大家详细介绍了,今天我们就来看看配置中心如何使用吧~
基本使用
在介绍Nacos注册中心实战时,阿鉴已经介绍并搭建好了Nacos集群,这里就直接使用当时的Nacos集群了。
- 引入依赖
在my-goods
项目引入config
依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
- 编辑配置
spring: application: name: my-goods cloud: nacos: config: server-addr: 192.168.2.11:8850 username: nacos password: nacos
- 在nacos新建配置文件并编写配置
由于我们的配置中并未指定命名空间,所以默认使用
public
命名空间
Data ID: 在什么都没有配置的情况下,Data ID为「服务名」或者「服务名.文件扩展名」,也就是
my-goods
或者my-goods.properties
(我们也没有配置文件扩展名,默认为properties
)Group: 默认为
DEFAULT_GROUP
配置格式:即为文件格式,默认为
properties
配置内容:文件格式是
properties
, 配置内容即为properties
格式写法
- 编写代码
@RestController @RequestMapping("/goods") public class GoodsController { @Value("${goods}") public String goods; @GetMapping("/config") public String config(){ return "this goods is " + goods; } }
- 启动服务测试
此时已经读取到远程的配置
动态配置
Nacos作为配置中心,将配置放在远端管理只是基础能力,更重要的是还提供了方便快捷的动态刷新配置功能。
- 修改代码
要想使得配置具有自动刷新的能力,只需要在对应的类加上@RefreshScope
注解即可
@RefreshScope @RestController @RequestMapping("/goods") public class GoodsController { @Value("${goods}") public String goods; @GetMapping("/config") public String config(){ return "this goods is " + goods; } }
- 修改Nacos上的配置
修改配置:apple -> banana
发布完之后可以看到控制台中出现监听到配置变更的输出
2021-05-09 22:45:13.103 INFO 5930 --- [168.1.11_8850] c.a.n.client.config.impl.ClientWorker : [fixed-114.116.212.76_8850] [polling-resp] config changed. dataId=my-goods, group=DEFAULT_GROUP 2021-05-09 22:45:13.104 INFO 5930 --- [168.1.11_8850] c.a.n.client.config.impl.ClientWorker : get changedGroupKeys:[my-goods+DEFAULT_GROUP]
- 再次调用接口
可以看到配置已经发生了变更
进阶使用
增加服务环境
一般来说,在我们开发项目时,都会区分环境,比如开发环境、测试环境、生产环境,每个环境配置都会有些许不同,比如mysql配置。那我们就会在配置文件中增加以下配置:
spring: profiles: active: dev
此时Nacos将增加新的Data ID: 服务名-环境名.文件扩展名
即为 my-goods-dev.properties
- 修改代码
@RefreshScope @RestController @RequestMapping("/goods") public class GoodsController { @Value("${goods}") public String goods; @Value("${price}") public String price; @GetMapping("/config") public String config(){ return "this goods is " + goods + ", and price is " + price; } }
- 新增配置
增加一个新的data id 为my-goods-dev.properties
配置 - 重启项目测试
优先级问题
如果在my-goods-dev.properties
配置中增加goods=lemon
的配置,那么此时my-goods
的和my-goods-dev.properties
的goods
配置哪个会生效呢?
- 在
my-goods-dev.properties
中增加goods=lemon
的配置 - 直接测试,此时无须重启项目
从测试结果看出,Nacos的优先级和Spring的优先级相同,带环境名的配置优先