Spring Cloud Config 是 Spring Cloud 团队创建的 个全新项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持, 它分为服务端与客户端两个部分。 其中服务端也称为分布式配置中心, 它是 一 个独立的微服务应用, 用来连接配置仓库并为客户端提供获取配置信息、 加密/解密信息等访问接口;而客户端则是微服务架构中的各个微服务应用或基础设施, 它们通过指定的配置中心来管理应用资源与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息。 Spring Cloud Config 实现了对服务端和客户端中环境变量和属性配置的抽象映射, 所以它除了适用于 Spring 构建的应用程序之外,也可以在任何其他语言运行的应用程序中使用。 由于 Spring Cloud Config 实现的配置中心默认采用 Git 来存储配置信息, 所以使用 Spring Cloud Config 构建的配置服务器, 天然就支持对微服务应用配置信息的版本管理, 并且可以通过 Git 客户端工具来方便地管理和访问配置内容。 当然它也提供了对其他存储方式的支持, 比如 SYN 仓库、 本地化文件系统
1 构建配置中心
1.1 创建springboot工程,命名为config-server,并引入config server依赖
1.2 在程序主类,添加 @EnableConfigServer 注解, 开启Spring的服务端功能
1.3 配置application.yml文件
其中 Git 的配置信息分别表示如下内容:
spring.cloud.config.server.git.uri:配置 Git 仓库位置
spring.cloud.config.server.git.searchPaths:配置仓库路径下的相对搜索位置, 可以配置多个
spring.cloud.config.server.git.username:访问 Git 仓库的用户名
spring.cloud.config.server.git.password:访问 Git 仓库的用户密码
1.4 配置规则详解
为了验证上面完成的分布式配置中心config-server, 根据 Git 配置信息中指定的仓库位置, 在https://github.com/Silent-Y/spring-cloud-learning.git/spring-cloud-in-action下创建了一个config-server目录作为配置仓库, 并根据不同环境新建下面4个配置文件:
applicationconfig.yml
applicationconfig-dev.yml
applicationconfig-test.yml
applicationconfig-prod.yml
在这4个配置文件中均设置了 个from属性, 并为每个配置文件分别设置了不同的值,如下所示:
from: git-default-1.0
from: git-dev-1.0
from: git-test-1.0
frorn: git-prod-1.0
为了测试版本控制,在该Git仓库的 master 分支中,我们为 from 属性加入 1.0 的后缀, 同时创建 一 个 config-label-test 分支, 并将各配置文件中的值用 2.0 作为后缀,完成了这些准备工作之后, 我们就可以通过浏览器、 POSTMAN或CURL等工具直接来访问我们的配置内容了。 访问配置信息的URL与配置文件的映射关系如下所示:
/{application}/{profile} [/{label}]
/{application}-{profile}. yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
上面的url会映射 {application}-{profile} .properties 对应的配置文件, 其
中 {label} 对应Git上不同的分支,默认为 master 。我们可以尝试构造不同的 url 来访问不同的配置内容, 比如, 要访问master分支,Silent-Y 应用的prod环境, 就可以访问这个 url:http://localhost:7001/applicationconfig/prod/master, 并获得如下返回信息(api返回和控制台输出结果均与预期存在区别,有待研究):
控制台输出结果:
2018-02-28 00:28:24.036 INFO 11948 --- [io-7001-exec-10] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@6aea7e43: startup date [Wed Feb 28 00:28:24 CST 2018]; root of context hierarchy
2018-02-28 00:28:24.058 INFO 11948 --- [io-7001-exec-10] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@6aea7e43: startup date [Wed Feb 28 00:28:24 CST 2018]; root of context hierarchy