Nacos配置管理+共享配置、配置热更新
1. 什么是配置管理?
Nacos 配置管理是一个集中管理配置的工具。
它把微服务的配置集中存放,方便管理。可以动态更新配置,配置变了,微服务能马上知道并更新,不用重启。还能进行版本控制,记录配置的历史版本方便回滚。并且可以对配置分组,区分不同环境或项目组的配置。同时有一定的权限控制,保障配置安全。
2. 共享配置
把微服务共享的配置抽取到Nacos中统一管理,这样就不需要每个微服务都重复配置了。分为两步:
2.1. 在Nacos中添加共享配置
以cart-service购物车模块为例,将application.yaml中重复的配置集中一起放到Nacos管理中
jdbc相关配置:
日志相关配置:
然后是swagger以及OpenFeign的配置:
而后在nacos控制台分别添加这些配置。
在配置管理->配置列表中点击+新建一个配置:
在弹出的表单中填写对应信息:
详细配置信息如下:
spring:
datasource:
url: jdbc:mysql://${hm.db.host:192.168.218.15}:${hm.db.port:3307}/${hm.db.database}?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
username: ${hm.db.un:root}
password: ${hm.db.pw:123}
mybatis-plus:
configuration:
default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler
global-config:
db-config:
update-strategy: not_null
id-type: auto
这里的jdbc的相关参数并没有写死,例如:
-
数据库ip:通过
${hm.db.host:192.168.218.15}
配置了默认值为192.168.218.15
,同时允许通过${hm.db.host}
来覆盖默认值 -
数据库端口:同样通过
${hm.db.port:3307}
配置了默认值为3307
,同时允许通过${hm.db.port}
来覆盖默认值 -
数据库database:可以通过
${hm.db.database}
来设定,无默认值
在控制台查看新增的配置
2.2 拉取共享配置
2.2.1 在cart-service模块中引入依赖:
代码如下:
<!--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>
2.2.2 新建bootstrap.yaml
代码如下:
spring:
application:
name: cart-service # 微服务名称
profiles:
active: dev
cloud:
nacos:
server-addr: 192.168.218.15:8848
config:
file-extension: yaml # 配置文件类型
shared-configs: #共享配置
- data-id: shared-jdbc.yaml
- data-id: shared-log.yaml
- data-id: shared-swagger.yaml
2.2.3 修改cart-service模块的application.yaml
代码如下:
server:
port: 8082
feign:
okhttp:
enabled: true # 开启okhttp
hm:
db:
database: hm-cart #数据库名
swagger:
title: "黑马商城购物车服务接口文档"
package: com.hmall.cart.controller
2.2.4 测试
启动服务,发现所有配置都生效了,说明成功了!
3. 配置热更新
配置热更新代表的我们修改完配置文件后,不需要重启服务,它会更新到微服务中,简单来说就是可以自动更新,不需要重新启动服务。
分为两步:
3.1 添加配置到Nacos
在nacos中添加一个配置文件,将购物车的上限数量添加到配置中
查看配置:
注意: 配置文件中购物车数量的变量名要和项目中读取配置类中定义的变量名要一致
3.2 新建一个属性读取类
新建一个config包,包下新一个名为CartProperties类,用来读取配置
代码如下:
package com.hmall.cart.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "hm.cart")
public class CartProperties {
private Integer maxItems;
}
在业务中使用该属性
3.3 测试
向购物车中添加多个商品
在nacos控制台,将购物车上限配置为10
无需重启,再次测试购物车功能:
加入成功!
无需重启服务,这说明我们的配置热更新就生效了!