11 Config:Spring Cloud分布式配置组件
11.1 Spring Cloud Config概述
-
分布式系统面临的配置文件的问题:分布式微服务系统意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务,几乎所有服务的运行都离不开配置文件的支持,这些配置文件通常由各个服务自行管理,以 properties 或 yml 格式保存在各个微服务的类路径下,例如 application.properties 或 application.yml 等。 -
这种将配置文件散落在各个服务中的管理方式,存在以下问题:
- 管理难度大:配置文件散落在各个微服务中,难以管理。
- 安全性低:配置跟随源代码保存在代码库中,容易造成配置泄漏。
- 时效性差:微服务中的配置修改后,必须重启服务,否则无法生效。
- 局限性明显:无法支持动态调整,例如日志开关、功能开关。
-
所以一套集中式的配置中心对配置进行统一管理,动态的配置管理设施是必不可少的。市面上开源的配置中心有很多,例如百度的 Disconf、淘宝的 diamond、360 的 QConf、携程的 Apollo 等都是解决这类问题的。SpringCloud提供了ConfigServer来解决这个问题。 -
Spring Cloud Config 是由 Spring Cloud 团队开发的项目,它可以为微服务架构中各个微服务提供集中化的外部配置支持。 Spring Cloud Config 为微服务架构中的微服务提供集中化的外部配置支持,将配置文件集中存储在一个外部的存储仓库或系统(例如 Git 、SVN 等)中,对配置的统一管理,以支持各个微服务的运行。
springboot多环境配置和yml多文档块是一种方式,但也是比较分散
接下来回顾下在springboot阶段配置文件的内容
-
多环境配置: -
application-test.properties 代表测试环境配置 -
application-dev.properties 代表开发环境配置 -
优先使用使用application.properties主配置文件,然后在里面可以指定需要激活的环境spring.profiles.active=dev
yml多文档块按以下方式配置:
application.yml,若yml和properties同时都配置了端口,但在yml或properties中没有激活其他环境 , 默认会使用properties配置文件的,因为properties类型的配置文件的优先级高
server:
port: 8081
#选择要激活那个环境块
spring:
profiles:
active: test
---
server:
port: 8083
spring:
profiles: dev #配置开发环境的名称
---
server:
port: 8084
spring:
profiles: prod #配置生产环境的名称
- Spring Boot 自动查找和加载properties和yml配置文件的位置顺序
file:./config/*/ |项目路径下的config文件夹配置文件
file:/config/application.properties | 项目路径
file:/application.properties
classpath:/config/application.properties | src下的java或resources为类路径
classpath:/application.properties
-
Spring Cloud Config 包含以下两个部分:
- Config Server:也被称为分布式配置中心,它是一个独立运行的微服务应用,用来连接配置仓库并为客户端提供获取配置信息、加密信息和解密信息的访问接口。
- Config Client:指的是微服务架构中的各个微服务,它们通过 Config Server来管理应用资源以及与业务相关的配置内容 ,并从 Config Sever 中获取和加载配置信息。
-
Spring Cloud Config 默认使用 Git 存储配置信息,因此使用 Spirng Cloud Config 构建的配置服务器天然就支持对微服务配置的版本管理。我们可以使用 Git 客户端工具方便地对配置内容进行管理和访问。除了 Git 外,Spring Cloud Config 还提供了对其他存储方式的支持,例如 SVN、本地化文件系统等。 -
Spring Cloud Config 工作原理如下图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YCPvGxxk-1664771379907)(…/typora-user-images/image-20220924121621584.png)]
11.3 SpringCloud config分布式配置中心与gitee整合
- 由于Spring Cloud Config默认使用Git来存储配置文件(也有其他方式,比如支持SVN和本地文件),但是最推荐的还是Git,而且使用的是http/https访问的形式:
- 在 Github 上创建一个名为 springcloud-config 的仓库(Repository)并获取该仓库的地址。由于 Github 站点对于国内用户来说不够稳定,很可能存在加载缓慢等问题,因此我们可以在码云或上执行该操作。前提需要提前在码云上注册账号。Github /码云(gitee)/coding devops。都是基于git的代码托管平台和研发平台
- Gitee 提供了基于SSH协议的Git服务,使用http协议不用密钥,在使用SSH协议访问仓库之前,需要先配置好账户/仓库的SSH公钥。怎样生成公钥将生成的ssh公钥(包含邮箱地址)复制到公钥框中,标题自动显示。点击确定即可完成配置账户/仓库的SSH公钥。
需要注意的是:公钥是仓库为本地电脑生成的令牌,如果换了一台电脑,那么就需要重新生成那台电脑的ssh公钥 
git clone [url] #Https或git协议的地址

- 在springcloud-config文件中添加application.yml配置文件

spring:
profiles:
active: dev
---
spring:
config:
activate:
on-profile: dev
application:
name: springcloud-config-dev
config:
info : springcloud-config-test
version: 1.0.0
---
spring:
config:
activate:
on-profile: test
application:
name: springcloud-config-test
config:
info : springcloud-config-test
version: 1.0.0
---
spring:
config:
activate:
on-profile: prod
application:
name: springcloud-config-prod
config:
info : springcloud-config-test
version: 1.0.0
- 使用git命令行来将这个文件提交仓库,需要4步操作
- 先进到这个目录,在执行git add .添加当前目录的所有文件到暂存区
cd springcloud-config
# 添加当前目录的所有文件到暂存区
$ git add .
# 添加指定文件到暂存区
$ git add [file1] [file2] ...
- 查看状态
$ git status

3.提交暂存区到本地仓库区
# 提交暂存区到仓库区
$ git commit -m [message]
# 提交暂存区的指定文件到仓库区
$ git commit [file1] [file2] ... -m [message]
 4.提交到远程仓库
# 上传本地指定分支到远程仓库
$ git push [remote] [branch]

origin 代表你远程库的别名 可以随意命名的 不是当前用户的意思
- 刷新gitee仓库,application.yml文件已提交
 
下一篇:SpringCloud-28-Spring Cloud Config创建Config Server
|