前言
我们在开发过程中总是会有各种各样的配置,比较如数据库连接配置,Mybatis配置等等各种组件的配置,这些配置都放在yml中,如果想要变更这些配置,需要修改yml文件,然后重新部署项目才能生效,同时,一些比较敏感的信息比如生产环境数据库密码也会暴露在开发中,这会导致不小的隐患,此时,就需要一个配置中心的组件来帮助我们更好的管理项目配置文件
配置中心可以让我们将配置放在远程进行管理,由管理人员配置好相关信息后,本地只需要从远程获取配置即可,同时也可以在修改完配置后产即生效,不需要重新部署项目
目前可以实现配置中心的组件还是比较多的,有SpringCloudConfig、Nacos、Apollo等,本文介绍的是SpringCloudConfig
SpringCloudConfig简介
Spring Cloud Config是最早的配置中心,是由Spring Cloud 团队开发的项目
Spring Cloud Config 包含以下两个部分:
- Config Server:也被称为分布式配置中心,它是一个独立运行的微服务应用,用来连接配置仓库并为客户端提供获取配置信息、加密信息和解密信息的访问接口。
- Config Client:指的是微服务架构中的各个微服务,它们通过 Config Server 对配置进行管理,并从 Config Sever 中获取和加载配置信息。
Spring Cloud Config 默认使用 Git 存储配置信息,所以修改配置文件的时候可以根据版本进行控制,可以回流到不同的版本
简单使用流程:
1、管理员将配置文件提交到git仓库
2、部署一个服务端的微服务,用于从git仓库获取配置文件
3、客户端调用服务端的接口获取对应的配置
SpringCloudConfig使用
创建配置文件仓库
在github(gitee或gitlab)中创建配置文件的仓库并上传配置文件application-dev.yml
搭建服务端
在父模块下新建一个模块并导入以下依赖
<!--配置中心服务器依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
在启动类上使用 @EnableConfigServer 注解开启 Spring Cloud Config 配置中心功能
在resource文件夹下新建applicartion.yml配置文件并加入以下配置
server:
port: 8880
spring:
application:
name: spring-cloud-config-server # 服务名
cloud:
config:
server:
git:
uri: XXXX.git # git地址
search-paths:
- XXX # 配置文件路径
label: master #读取分支
启动服务端微服务
SpringCloudConfig已经封装好了接口,直接调用即可获取到配置文件
总共分为三个接口
接口 | 使用示例 |
---|---|
/{application}-{profile}.{suffix} | /config-dev.yml |
/{application}/{profile}[/{label}] | /config/dev/master |
/{label}/{application}-{profile}.{suffix} | /master/config-dev.yml |
参数说明:
{application}:配置文件的名称
{profile}:环境名
{label}:Git 分支名,默认是 master 分支
{suffix}:配置文件的后缀
我们访问http://localhost:8880/application-dev.yml即可获取到配置文件的信息
搭建客户端
在父模块下同样创建一个微服务并导入以下依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
在resource文件夹下创建bootstrap.yml配置文件
这里一定要是bootstrap.yml如果是application.yml会读取不到配置,因为这两个配置文件级别不一样,bootstrap.yml是系统级的配置文件,而application.yml是用户级的配置文件
spring:
application:
name: spring-cloud-config-client # 服务名
cloud:
config:
label: master # 分支
name: application # 配置文件名
profile: dev # 配置文件后缀
uri: http://localhost:8880 # SpringCloudConfig服务端地址
这样一来,我们就搭建好了SpringCloudConfig了
但是,这时如果我们改了git仓库中的配置,客户端是不会自动更新的,必须要重启客户端配置才会更新
如果想要实现自动更新,可以在客户端使用actuator进行实时监控,缺点是每个客户端都需要配置actuator,可以使用SpringCloudBus实现,原理为当配置文件发生变更时,运维人员调用服务端的post接口/actuator/refresh,些时服务端会将请求转发给SpringCloudBus,SpringCloudBus会向所有客户端通知拉取最新配置
总结
SpringCloudConfig在自动更新配置方面做的还是不够方便,在这方面,Nacos和Apollo都是十分优秀的组件,尤其是Nacos更是同时支持服务注册中心,同时更新频率较高,是现阶段配置中心和服务注册与发现的不错选择
👍 欢迎前往博客主页查看更多内容
👍 如果觉得不错,期待您的点赞、收藏、评论、关注
👍 如有错误欢迎指正!
👍 Gitee地址:https://gitee.com/ralphchen/ralph-cloud