为什么需要配置中心?
1、集中管理配置
2、不同环境不同配置
3、运行期间动态调整配置
4、自动刷新
Spring Cloud Config为分布式系统外部化配置提供了服务器端和客户端的支持,它包括
Config Server和Config Client两部分。
Config Server是一个可横向扩展、集中式的配置服务器,它用于集中管理应用程序各个环
境下的配置,默认使用Git存储配置内容(也可使用Subversion、本地文件系统或Vault存储
配置),因此可以方便的实现对配置的版本控制与内容审计。
Config Client 是Config Server的客户端,用于操作存储在Config Server中的配置属性。
使用config实现配置中心服务端及客户端
首先新增git配置仓库中心,地址为:https://gitee.com/aaronrao/spring-cloud-config-
test
在仓库里增加如下配置文件:
编写config配置中心服务端(使用git仓库存储)
见示例:10-ms-config-server
添加依赖,并在启动类上增加注解@EnableConfigServer
配置文件application.yml如下:
启动项目,访问地址:http://localhost:8080/ms-config/dev,得到整个项目的配置信息
访问地址:http://localhost:8080/ms-config-dev.properties,得到配置文件内容
配置文件映射规则如下:
以上端点都可以映射到{application}-{profile}.properties这个配置文件,{application}表
示微服务的名称,{label}对应Git仓库的分支,默认是 master
编写config配置中心客户端
见示例:10-ms-config-client
添加依赖
除了默认的application.yml配置文件,还需增加一个bootstrap.yml的配置文件,内容如
下:
spring cloud有一个“引导上下文”的概念,这是主应用程序的父上下文。引导上下文负责
从配置服务器加载配置属性,以及解密外部配置文件中的属性。和主应用程序加载
application.(yml或 properties)中的属性不同,引导上下文加载(bootstrap.)中的属性。
配置在 bootstrap.中的属性有更高的优先级,因此默认情况下它们不能被本地配置覆盖。
启动项目,访问地址:http://localhost:8081/profile,得到config配置中心的配置文件内
容如下
config配置中心服务端配置详解
见示例:10-ms-config-server
各种配置方法见项目配置文件,如下
配置信息的加解密安全处理
前文是在 Git仓库中明文存储配置属性的。很多场景下,对于某些敏感的配置内容(例如数
据库账号、密码等),应当加密存储。 config server为配置内容的加密与解密提供了支
持。
安装JCE
config server的加解密功能依赖Java Cryptography Extension(
JCE)
Java8 JCE下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-
2133166.html
下载JCE并解压,将其中的jar包覆盖到JDK/jre/lib/security目录中
对称加密
config server提供了加密与解密的接口,分别是/encrypt与/decrypt
见示例:10-ms-config-server-encryption
添加依赖
增加一个配置文件bootstrap.yml,配置对称加密的密钥
运行项目,验证加解密
加密:curl http://localhost:8080/encrypt -d mySecret解密:curl http://localhost:8080/decrypt -d
767552394ee539201214199d55b0a91b1485d959b667eeabad29a101b9c1c61e
在git仓库增加配置文件ms-config-encryption-dev.yml,内容如下
访问地址:http://localhost:8080/ms-config-encryption-dev.yml,得到密钥原文
说明 config server能自动解密配置内容。一些场景下,想要让 config server直接返回密文
本身,而并非解密后的内容,可设置
*spring.cloud.config.server.encrypt.enabled=false,这时可由 ConfigCIient自行解
密。