一、Nacos 配置中心
Nacos Server 还可以作为配置中心,对 Spring Cloud 应用的外部配置进行统一地集中化管理。而我们只需要在应用的 POM 文件中引入 spring-cloud-starter-alibaba-nacos-config 即可实现配置的获取与动态刷新。
从配置管理的角度看,Nacos 可以说是 Spring Cloud Config 的替代方案,但相比后者 Nacos 的使用更简单,操作步骤也更少。
在分布式微服务系统中,几乎所有服务的运行都离不开配置文件的支持,这些配置文件通常由各个服务自行管理,以 properties 或 yml 格式保存在各个微服务的类路径下,例如 application.properties 或 application.yml 等。
这种将配置文件散落在各个服务中的管理方式,存在以下问题:
- 管理难度大:配置文件散落在各个微服务中,难以管理。
- 安全性低:配置跟随源代码保存在代码库中,容易造成配置泄漏。
- 时效性差:微服务中的配置修改后,必须重启服务,否则无法生效。
- 局限性明显:无法支持动态调整,例如日志开关、功能开关。
二、实现配置管理
1. 添加配置管理服务
- 配置文件的id:[服务名称]-[profile].[后缀名]
- 配置内容:对应需求的相关配置。例如需要热更新的内容
2. 配置获取流程图有
3. 配置获取的具体步骤
- 添加配置管理依赖
<!-- nacos的配置管理 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
- 创建bootstrap.yaml文件
- 文件介绍:这个文件是一个引导文件,优先级高于application.yml
- 在bootstrap.yml文件配置相关信息
spring:
application:
name: userservice
profiles:
active: dev # 环境
cloud:
nacos:
server-addr: localhost:8848 # nacos地址
config:
file-extension: yaml # 文件后缀名
- 将application.yml文件中重复的部分删除
4. 验证配置拉取是否生效
- 通过@Value注解注入nacos配置文件信息,并编写请求接口查看
@Value("${pattern.dateformat}")
private String dateformat;
@GetMapping("now")
public String now(){
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
}
注意:一定要注意配置的名称!!!!!
5. 实现热更新的两种方式
- 通过@Value注解注入,结合@RefreshScope(@Value注入变脸的所在类)来刷新
- 通过@ConfigurationProperties注入,自动给刷新(无需@RefreshScope注解)推荐使用
三、Nacos多环境配置共享
1.微服务启动时会从nacos读取多个配置文件:
- [服务名称]-[服务环境].[文件后缀]
- [服务名称].[文件后缀]
- 无论【服务环境】和变化,[服务名称].[文件后缀] 这个文件一定会加载,因此多环境共享配置可以写入这个文件
2. 多种配置的优先级
[服务名称]-[服务环境].[文件后缀] > 服务名称].[文件后缀] > 本地配置
3. 多环境读取共享配置实现
- 添加 [服务名称].[文件后缀] 文件
- 添加对应属性字段,并配一个请求接口用来测试
添加对应的属性字段
测试访问的接口
查看配置中心的 配置文件属性
访问请求路径