1. Spring Cloud Config简介
Spring Cloud Config
可以为微服务架构中的应用提供集中化的外部配置支持,它分为服务端和客户端两个部分。
服务端被称为分布式配置中心,它是个独立的应用,可以从配置仓库获取配置信息并提供给客户端使用。
客户端可以通过配置中心来获取配置信息,在启动时加载配置。Spring Cloud Config
默认采用Git
来存储配置信息,所以天然就支持配置信息的版本管理,并且可以使用Git
客户端来方便地管理和访问配置信息。
2. 准备工作
因为config server
是需要到git
上拉取配置文件的,所以还需要在远程的git
上新建一个存放配置文件的仓库,
如下仓库中存放客户端配置文件:
1 | application-beta.yml |
3. 配置中心服务端搭建
- 搭建服务端配置中心(
config-server
),在pom.xml
文件中添加依赖:
1 | <!--配置服务--> |
- 在服务端编辑
application.yml
配置文件内容如下:
1 | server: |
- 在启动类上,加上
@EnableConfigServer
注解,声明这是一个config-server
。代码如下:
1 | /** |
- 启动项目,访问
http://localhost:8009/master/application-dev.yml
,可以看到能够访问到客户端配置文件的内容。
4. 客户端获取配置
- 在
pom.xml
文件中添加依赖:
1 | <dependency> |
- 编辑
bootstrap.yml
配置文件内容如下:
1 | server: |
启动服务,配置中心读取的配置生效。
5. 获取配置信息的基本规则
1 | # 获取配置信息 |
name
: 文件名,一般以服务名(spring.application.name
)来命名,如果配置了spring.cloud.config.name
,则为该名称.profiles
: 一般作为环境标识,对应配置文件中的spring.cloud.config.profile
lable
: 分支(branch
),指定访问某分支下的配置文件,对应配置文件中的spring.cloud.config.label
,默认值是在服务器上设置的(对于基于git
的服务器,通常是“master
”)
5.1 Maven的Profile管理
Maven
提供了Profile
切换功能(多环境dev,beta,prod
), 如下pom.xml
:
1 | <profiles> |
配置文件bootstrap.yml
:
1 | spring: |
SpringBoot
一把情况下会遵从你选的环境将@activatedProperties@
替换掉。
但SpringCloud
比较特殊,使用配置中心后客户端不会再使用application.yml
,而是使用bootstrap.yml
。但是Maven
不认bootstrap.yml
里的@activatedProperties@
。
解决:在pom.xml
的build
标签里添加如下代码,用于过滤yml
文件:
1 | <build> |
5.2 将不同服务的配置文件放到以服务名命名的目录下
因为config server
默认情况下只会搜索git
仓库根路径下的配置文件,所以我们还需要加上一个配置项:search-paths
,
该配置项用于指定config server
搜索哪些路径下的配置文件,需要注意的是这个路径是相对于git
仓库的,并非是项目的路径。
1 | spring: |