在程序运行期间,动态的更改内存中的配置,不知道各位老铁了解过不,或者在项目中用过。不是数据库改配置这种,是直接更改内存。之前说过分布式集中配置中心,百度的一款disconf分布式配置中心,但是disconf这个2016年之后就不在维护了。diamond是针对dubbo的一款分布式的配置框架也有6年没有维护了。Apollo(阿波罗)是携程框架部门研发的分布式配置中心。但是本次主要说springcloud,其实springcloud也有自己的分布式集中配置中心Spring Cloud Config。
源码:https://github.com/limingios/netFuture/tree/master/源码/『互联网架构』软件架构-分布式集中配置中心Spring Cloud Config详解(上)(103)/
Spring Cloud Config介绍
> Spring Cloud Config为分布式系统外部化配置提供了服务器端和客户端的支持,它包括Config Server和Config Client两部分。Config Server是一个可横向扩展、集中式的配置服务器,它用于集中管理应用程序各个环境下的配置,默认使用Git存储配置内容(也可使用Subversion、本地文件系统或Vault存储配置),因此可以方便的实现对配置的版本控制与内容审计。Config Client 是Config Server的客户端,用于操作存储在Config Server中的配置属性。
官网
https://github.com/spring-cloud/spring-cloud-config
使用config实现配置中心服务端及客户端
> 首先新增git配置仓库中心,地址为:https://github.com/limingios/springcloudconfig.git,在仓库里增加如下配置文件
####(二) 服务端源码
10-ms-config-server
添加依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency>
并在启动类上增加注解@EnableConfigServer
配置文件application.yml
server: port: 8080 spring: application: name: microservice-config-server cloud: config: server: git: uri: https://github.com/limingios/springcloudconfig.git # 配置Git仓库的地址 force-pull: true username: # Git仓库的账号 password: # Git仓库的密码
里面有个version,其实跟git中的版本是一致的。
http://localhost:8080/ms-config-dev.properties
http://localhost:8080/task/ms-config-dev.properties
每次访问后,都会将文件通过server下载到本地
各种配置方法见项目配置文件
客户端client,启动的时候其实就是config从server中获取一下配置文件,对应的参数放入内存中,不保存在本地。如果server-config挂了的话,只要clent不重启不影响client的。
####(三) 编写config配置中心客户端
spring cloud有一个【引导上下文】的概念,这是主应用程序的父上下文。引导上下文负责从配置服务器加载配置属性,以及解密外部配置文件中的属性。和主应用程序加载application. (yml或 properties)中的属性不同,引导上下文加载(bootstrap. )中的属性。配置在 bootstrap.*中的属性有更高的优先级,因此默认情况下它们不能被本地配置覆盖。
* 源码
10-ms-config-client
添加依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency>
默认的application.yml配置文件,还需增加一个bootstrap.yml的配置文件
1.client端启动后,启动访问server端,从server端下载配置文件到【内存】中
2.访问对应的value中的值,直接就可以看到server端配置的属性
编写了一个Controller,value获取配置文件中的数据。这都是spring mvc的基础,这里就不在做阐述了。
在 Git仓库中明文存储配置属性的。很多场景下,对于某些敏感的配置内容(例如数据库账号、密码等),应当加密存储。 config server为配置内容的加密与解密提供了支持。
安装JCE
> config server的加解密功能依赖Java Cryptography Extension(JCE)
Java8 JCE下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
注意:就算有也要覆盖,负责会报错:Unable to initialize due to invalid secret key
下载JCE并解压,将其中的jar包覆盖到JDK/jre/lib/security目录中
对称加密
> config server提供了加密与解密的接口,分别是/encrypt与/decrypt
源码:10-ms-config-server-encryption
启动项目:注意填写加密的key。
获取加密信息(post方式):http://localhost:8080/encrypt
body中填写要加密的信息:www.idig8.com
获取到加密信息:9ef1e86a01b272fd75d72a0dc40161db938430c069a76d6d82a17b2b5a8e2cf2
将这个信息放入需要加密的信息中前面一定要加入{cipher}
{cipher} 英文就是暗号的意思,有了暗号才会给你解密的
注意:如果是properties 不需要加引号引入value值,如果是yml需要加入引号
获取解密信息 http://localhost:8080/decrypt
将刚才加密的信息进行解密9ef1e86a01b272fd75d72a0dc40161db938430c069a76d6d82a17b2b5a8e2cf2
直接访问http://localhost:8080/ms-config-encryption-dev.yml,得到密钥原文
说明 config server能自动解密配置内容。一些场景下,想要让 config server直接返回密文
本身,而并非解密后的内容,可设置spring.cloud.config.server.encrypt.enabled=false,这时可由 ConfigCIient自行解密。
PS:分布式集中配置中心Spring Cloud Config 确实功能很强大,这次咱们主要说下,如果制作server,client端如何获取,而且还说了加密和解密。下次咱们说说动态刷新配置这块。
百度未收录
>>原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!
>>原文链接地址:上一篇:已是最新文章