当微服务部署的实例越来越多,达到数十、数百时,逐个修改配置就会很烦 主要还很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。
nacos就提供了这种功能,而且可以实现配置的热更新。
一、先在nacos上创建新配置
先进到nacos的管理页面。
开始写配置文件:
Data ID格式统一按照这个格式来: 服务名 - 环境 . 后缀名。
主要是因为后面要导入的bootstrap.yaml Spring默认的读取格式就是这样的。 所以我们按着约定来,会省下很多事情。
剩下的东西自己看着选就好了。
二、引入nacos-config依赖
在我们需要将配置文件上nacos的服务的pom文件中引入如下依赖:
<!--nacos配置管理依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
Spring引入了一种新的配置文件:bootstrap.yaml
它的读取流程如下:
启动项目 --> 读取bootstrap.yaml文件 --> 找到nacos中,对应的配置文件 --> 读取本地 application.yaml文件 ---> 创建容器 加载bean ...
因此,我们需要在bootstrap.yaml文件中放入nacos的地址和基本信息。
bootstrap.yaml:
#动态服务
spring:
profiles:
# 开发环境: 开发->dev, 测试->test, 生产->prod
active: dev
application:
# 服务名称
name: user-service
cloud:
nacos:
config:
# Nacos地址
server-addr: localhost:8848
# 对应分组: 开发->dev, 测试->test, 生产->prod
group: dev
# 文件后缀
file-extension: yaml
# 命名空间id
namespace: 7d3fe058-f389-4c1f-ae60-e48fd1d309b2
它会根据配置文件中的 spring.cloud.nacos.server-addr 获取nacos地址
然后按着
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
来获得配置文件名。所以前面才让大家按着那个规范来命名 Data ID
另外,不同的版本可能配置文件上会有一些些的差异。
我的Spring版本是:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.9.RELEASE</version>
<relativePath/>
</parent>
三、配置热更新
创建一个实体类:
@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class OssProperties {
private String accessKey;
private String secret;
}
这是我们很常用的oss对象存储的部分实体类。
关键在于 @ConfigurationProperties(prefix = "") 注解
里面放的是配置文件中的每个标题 ":" 冒号则用 "." 代替,它会自动将相同的字段名映射上。
比如我的配置文件如图。
代码中是:则OssProperties的实体类的 secret 就会自动变成 YsF... 这一段。
那么我们来测试一下是否为热更新:
测试很简单。直接输出就好了:
然后随便写个测试方法:
发请求:
debug一下,可以看到accessKey是 KTAI5 ...
然后我们现在放行。去修改一下nacos上的文件,保存。
然后再发一次请求:
可以看到发生变化了。
好了 这篇文章就先到这了。希望能对大家有帮助。