1.介绍
Spring Cloud Config 是 Spring Cloud 团队创建的一个全新项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端与客户端两个部分。其中服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置仓库并为客户端提供获取配置信息、加密 / 解密信息等访问接口;而客户端则是微服务架构中的各个微服务应用或基础设施,它们通过指定的配置中心来管理应用资源与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息。Spring Cloud Config 实现了对服务端和客户端中环境变量和属性配置的抽象映射,所以它除了适用于 Spring 构建的应用程序之外,也可以在任何其他语言运行的应用程序中使用。由于 Spring Cloud Config 实现的配置中心默认采用 Git 来存储配置信息,所以使用 Spring Cloud Config 构建的配置服务器,天然就支持对微服务应用配置信息的版本管理,并且可以通过 Git 客户端工具来方便的管理和访问配置内容。当然它也提供了对其他存储方式的支持,比如:SVN 仓库、本地化文件系统。
2.Config的配置和使用
2.1新建一个server端
2.2 添加依赖和配置
依赖:
配置文件:
Spring Cloud Config 也提供本地存储配置的方式。我们只需要设置属性 spring.profiles.active=native,Config Server 会默认从应用的 src/main/resource 目录下检索配置文件。虽然 Spring Cloud Config 提供了这样的功能,但是为了支持更好的管理内容和版本控制的功能,还是推荐使用 Git 的方式。
如果Git仓库为公开仓库,可以不填写用户名和密码,如果是私有仓库需要填写,
可以如下配置:
spring.cloud.config.server.git.username:访问 Git 仓库的用户名
spring.cloud.config.server.git.password:访问 Git 仓库的用户密码
2.3 添加注解支持
在启动类上添加@EnableConfigServer注解,激活对配置中心的支持
2.4 启动和测试
首先测试一下Server端能否读到github上的配置信息,在github上创建一个文件夹config-file,里面创建三个配置文件:config-client-dev.yml, config-client-pro.yml, config-client-test.yml。都添加一个属性config.demo,分别添加属性值:dev,pro,test
启动服务,访问http:localhost:7006/config-client/dev。返回信息如下:
上述的返回的信息包含了配置文件的位置、版本、配置文件的名称以及配置文件中的具体内容,说明 Server 端已经成功获取了 Git 仓库的配置信息。如果直接查看配置文件中的配置信息可以访问:http:localhost:7006/config-client-dev.yml
返回:
仓库中的配置文件会被转换成 Web 接口,访问可以参照以下的规则:
- /{application}/{profile}[/{label}]
- /{application}-{profile}.yml
- /{label}/{application}-{profile}.yml
- /{application}-{profile}.properties
- /{label}/{application}-{profile}.properties
上面的 URL 会映射 {application}-{profile}.yml 对应的配置文件,其中 {label} 对应 Git 上不同的分支,默认为 master。以 config-client-dev.yml 为例子,它的 application 是 config-client,profile 是 dev。
3.获取配置中心信息
3.1 新建一个client端
3.2 添加依赖和配置
添加依赖:
配置文件需要两个:application.yml和bootstrap.yml,配置分别如下
application.yml
bootstrap.yml
特别注意:上面这些与 Spring Cloud Config 相关的属性必须配置在 bootstrap.yml 中,config 部分内容才能被正确加载。因为 config 的相关配置会先于 application.yml,而 bootstrap.yml 的加载也是先于 application.yml。
3.3 添加注解支持
启动类不用修改
3.4启动和测试
添加一个Controller类,用来测试是否能获取到Server端的信息
启动服务,访问:http:localhost:7007/info
正常返回:
这就说明config-client从config-server获取了config.demo的属性,而config-server是从git仓库读取的。