SpringCloud 配置中心
SpringCloud 可以借助git仓库实现配置中心的功能。
通过 git
进行统一的配置管理不经能够简化我们的配置方式,同时也可以借助 git
实现配置历史追溯与变更还原。
为什么要使用 Spring Cloud Config?
- 对于分布式应用而言,通过统一的配置中心可以简化对配置的维护成本
- 提高配置的安全性
- 实现配置变更后的实时更新
问题: SpringCloud 的git仓库只能是 github 吗?
不是,我们可以使用任意一个 git 仓库托管我们的配置,如果可以的话我们甚至可以搭建自己的私有仓库来实现配置的托管。
Spring Cloud Config 由server 和 client 两部分组成。
-
server
用来获取远程的配置信息(默认为 Git 仓库),并且以接口的形式提供出去; -
client
根据server
提供的接口读取配置文件,以便于初始化自己的应用。
由图可见,如果我们想要实现一个 Spring Cloud Config 的话,需要首先创建一个 git 仓库,在哪里创建没关系,国外的 github
还是 国内的 gitee(码云)
都可以,将这个仓库作为配置的核心仓库。如果是测试使用的仓库公开没关系,公开仓库可以在配置 Server 端的时候不用输入用户名和密码。
创建 git 仓库作为配置仓库
我们以 码云(gitee)为例,登录码云账号,然后新建一个空仓库。然后在仓库中创建一个文件夹 conf
,并在其中 创建一个文件 demo01-dev.yml
,其中 demo01 是你客户端的应用名。目录结构如下:
.
└── conf
└── demo01-dev.yml
创建 Spring Cloud Config
Server 端
新建一个Maven 工程,并添加 spring cloud config server 依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
建议使用 Spring Initializer 生成,看图:
在生成的工程中配置 git 仓库:
# 端口
server:
port: 8000
spring:
application:
# 应用名称
name: config-server
cloud:
config:
server:
git:
# 仓库地址
uri: https://gitee.com/demo/config-repo.git
# 对应 {label} 部分,即 Git 的分支
label: master
# 仓库文件夹名称,多个以逗号分隔
search-paths: conf
# git 仓库用户名(公开库可以不用填写)
username:
# git 仓库密码(公开库可以不用填写)
password:
启动项目,访问地址:
http://localhost:8000/demo01-dev.yml
此时访问的就是我们创建的配置文件,如果还没有增加任何配置的话我们可以尝试增加一个配置然后重新访问改地址,如在demo01-dev.yml中增加配置:
hello:
world: good world
那么当我们再次访问接口时则会得到该配置信息。
Spring Cloud Config 除了提供了上述的配置访问接口以外,还提供了了其他访问接口如:
# 这里的 label 表示 git 分支
/{application}/{profile}[/{label}]
示例:http://localhost:8000/demo01/dev
/{application}-{profile}.yml
示例:http://localhost:8000/demo01-dev.yml
/{label}/{application}-{profile}.yml
示例:http://localhost:8000/master/demo01-dev.yml
/{application}-{profile}.properties
示例:http://localhost:8000/demo01-dev.properties
/{label}/{application}-{profile}.properties
示例:http://localhost:8000/master/demo01-dev.properties
创建Spring Cloud Config
Client 端
对于 Client
端而言,需要是一个 Spring Boot 项目并且依赖了:
<!-- config 依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
配置
要想连接 Server
端,首先需要配置连接 Server
端的相关信息,配置bootstrap.yml
spring:
cloud:
config:
# 仓库地址
uri: http://127.0.0.1:8000
# 对应 {label} 部分,即 Git 的分支
label: master
# 对应 {application} 部分
name: demo01
# 对应 {profile} 部分
profile: dev
然后配置 application.yml
# 端口
spring:
application:
# 应用名称
name: spring-cloud-client
Spring Boot 的读取配置顺序为bootstrap.yml
–>application.yml
,
在读取完 bootstrap.yml
后连接Spring Cloud Config Server
端后,application.yml
即可使用Server
端配置的文件选项了。