使用Nacos做共享配置管理、配置热更新以及动态路由
一、共享配置管理
在需要拉取公共配置的模块下引入依赖
<!--nacos配置管理-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--读取bootstrap文件-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
在nacos控制台->
配置管理
->配置列表
中点击+
新建一个公共配置信息
Data Id:共享配置文件的唯一Id,用作该共享文件的唯一标识
Gruop:该共享文件的分组,其实就是给配置文件分组,一个组下可以有好几个配置文件,没有分组需求的就直接使用默认分组就行
配置文件中的${xxx:xxx},变量,通过读取本地applicantion.yaml文件获取具体的值
第一个 xxxx 是变量在本地application.yaml中的位置
第二个xxx:是该变量的默认值,如果本地没有该变量的值,就使用这个默认值
在bootstrap.yaml文件下配置nacos地址,以及要读取的公共配置文件的信息
spring:
application:
name: cart-service # 服务名称
profiles:
active: dev
cloud:
nacos:
server-addr: 192.168.243.128 # nacos地址
config:
file-extension: yaml # 文件后缀名
shared-configs: # 共享配置
- dataId: shared-jdbc.yaml # 共享mybatis配置
- dataId: shared-log.yaml # 共享日志配置
- dataId: shared-swagger.yaml # 共享日志配置
编写本地
application.yaml
文件,配置共享配置文件中的变量值,和自己的本地配置
server:
port: 8082
feign:
okhttp:
enabled: true # 开启OKHttp连接池支持
hm:
swagger:
title: 购物车服务接口文档
package: com.hmall.cart.controller
db:
database: hm-cart
二、热更新
Nacos上的公共文件,本来就是支持热更新的,也就是说,我们 在nacos上修改公共配置文件的配置信息,就不需要在主机上重启项目服务,就能使公共配置文件更新生效。
当使用公共配置文件注入本地变量的值的时候,修改公共配置文件中的值,本地变量中的值也会跟着改变,也不需要重启
现在nacos上编写公共配置
注意:文件的dataId格式只能是:[服务名]-[spring.active.profile].[后缀名]
[[服务名]:我们在配置bootstrap.yaml的时候已经配置过(为cart-service)
[spring.active.profile]:在配置bootstrap.yaml的时候也配过,虽然我们配的是dev,但是我们在idea运行的时候已经在运行配置中修改为local了。
当我们的dataId不填写[spring.active.profile]时,,就会默认在所有所有环境下剩下
本地注入变量
@Data
@Component
@ConfigurationProperties(prefix = "hm.cart")
public class CartProperties {
private Integer maxAmount;
}
使用注入的变量
这样只要在nacos的配置中更改macAmount中的值,那么本地中的值也会改变了
顺便一提,一般情况下 上图中的代码的 itemClient和carProperties变量 是要使用@Autowired来注入对象的。不需要是因为 类上使用了@RequiredArgsConstructor注解,会自动生成带有final约束或者@NonNull注解的参数的构造函数.
三、动态路由
参考文章:
day04-微服务02 - 飞书云文档 (feishu.cn)