目录
前言
回顾之前的微服务项目结构,搭建了两个微服务,分别是userservice 和orderservice ,每一个微服务都需要对数据库进行查询,每一个服务之间还进行了相互调用, 要实现相互调用就需要将每一个服务注册到注册中心 ,消费者就可以从注册中心完成服务的发现实现服务的获取和负载均衡
随着项目的变大,我们的微服务越来越多,我们可能会面临一些问题,比如配置文件需要修改,那么我们就要逐个去调整每一个微服务的配置文件,并且调整完成之后每一个微服务都需要重启
需求分析
- 希望对每一个微服务的配置文件进行统一管理
- 改动完了之后不用对服务进行重启,实现热更新
解决方案
需要一个配置管理服务,记录微服务中一些核心的配置,在微服务启动的时候可以去读取配置管理服务中的配置与本地的配置进行结合作为完整配置
当配置管理服务更改之后会立即通知微服务,微服务就会立即读取新的配置实现热更新
实现步骤
进入nacos控制面板
新建配置
配置内容不是将项目中的配置内容全部粘贴过来,是需要进行热更新的配置添加进来就行,然后点击发布
这样就添加成功了
项目配置获取步骤
在项目启动之后会读取nacos中的配置文件,但读取之前需要知道nacos地址,而nacos地址通常会在application.yml中,所以在读取本地配置文件之前需要读取bootstrap.yml,bootstrap.yml文件是引导文件,优先级高于application.yml
统一配置管理步骤
引入Nacos的配置管理客户端依赖
<!--nacos配置管理依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
新建bootstrap.yml文件
在userservice中的resource目录添加一个bootstrap.yml文件
spring:
application:
name: userservice
profiles:
active: dev #环境
cloud:
nacos:
server-addr: localhost:8848 #nacos地址
config:
file-extension: yaml #后缀名
更改application.yml文件
将application.yml文件中与bootstrap.yml文件冲突的配置删掉,例如:
application:
name: userservice
cloud:
nacos:
server-addr: localhost:8848 #nacos服务地址
测试
user-service中将pattern.dateformat这个属性注入到UserController中做测试
java
@Value("${pattern.dateformat}")
private String dateformat;
@GetMapping("now")
public String now() {
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
}
重启userservice,浏览器进入 http://localhost:8081/user/now
这里就已经获取到了nacos配置文件
总结
- 将配置交给Nacos管理的步骤
- 在Nacos中添加配置文件
- 在微服务中引入nacos的config依赖
- 在微服务中添加bootstrap.yml,配置nacos地址、当前环境、服务名称、文件后缀名。这些决定了程序启动时去nacos读取哪个文件