Spring Cloud Config 配置中心

本文深入探讨Spring Cloud Config的功能,包括配置中心的必要性、ConfigServer与ConfigClient的工作原理、配置文件的映射规则、安全处理如加解密、配置刷新机制、与Spring Cloud Bus的集成、安全认证、与Eureka的配合以及高可用性策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、为什么需要配置中心?
1)、集中管理配置
2)、不同环境不同配置
3)、运行期间动态调整配置
4)、自动刷新

2、Spring Cloud Config配置中心介绍

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-configtest 在仓库里增加如下配置文件:

编写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

 

3、编写config配置中心客户端
见示例:10-ms-config-client 添加依赖

除了默认的application.yml配置文件,还需增加一个bootstrap.yml的配置文件,内容如下:

spring cloud有一个“引导上下文"的概念,这是主应用程序的父上下文。引导上下文负责从配置服务器加载配置属性,以及解密外部配置文件中的属性。和主应用程序加载application.*(yml或 properties)中的属性不同,引导上下文加载(bootstrap.*)中的属性。
配置在 bootstrap.*中的属性有更高的优先级,因此默认情况下它们不能被本地配置覆盖。启动项目,访问地址:http://localhost:8081/profile,得到config配置中心的配置文件,内容如下:

4、config配置中心服务端配置详解
见示例:10-ms-config-server 各种配置方法见项目配置文件,如下

5、配置信息的加解密安全处理
前文是在 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目录中

6、对称加密
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自行解密。


7、配置信息手动刷新
很多场景下,需要在运行期间动态调整配置。如果配置发生了修改,微服务要如何实现配置的刷新呢?
见示例:10-ms-config-client-refresh 添加依赖如下,其中spring-boot-starter-actuator提供了/refresh端点,用于配置的刷新


在Controller上添加注解@RefreshScope,添加这个注解的类会在配置更改时得到特殊的处理


1、启动项目(启动两个,一个端口8081,一个端口8082),访问地址:http://localhost:8081/profile,得到结果:dev-1.0,访问地址:http://localhost:8082/profile,得到结果:dev-1.0
2、修改git仓库里的配置文件ms-config-dev.properties的内容为:profile=dev1.0change
3、再次访问地址:http://localhost:8081/profile,得到结果还是dev-1.0,说明配置尚未刷新
4、发送post请求:http://localhost:8081/refresh,返回结果:"profile",表示profile这个配置属性已被刷新
5、再次访问http://localhost:8081/profile,得到结果:dev-1.0-change,说明属性已刷新
6、再次访问http://localhost:8082/profile,得到结果:dev-1.0,说明8082的服务并没有刷新,还需再次手动刷新才能更新配置


8、配置信息自动刷新
前文讨论了使用/refresh端点手动刷新配置,但如果所有微服务节点的配置都需要手动去刷新,工作量可想而知。不仅如此,随着系统的不断扩张,会越来越难以维护。因此,实现配置的自动刷新是很有必要的,Spring Cloud Bus就可以实现配置的自动刷新。Spring Cloud Bus使用轻量级的消息代理(例如 RabbitMQ、 Kafka等)连接分布式系统的节点,这样就可以广播传播状态的更改(例如配置的更新)或者其他的管理指令。可将Spring Cloud Bus想象成一个分布式的Spring Boot Actuator。


见示例:10-ms-config-server-refresh-cloud-bus和10-ms-config-client-refresh-cloud-bus
服务端示例:10-ms-config-server-refresh-cloud-bus 添加依赖


配置文件增加rabbitmq的配置:


客户端示例:10-ms-config-client-refresh-cloud-bus 添加依赖


配置文件增加rabbitmq的配置:


运行项目(运行一个config server和两个config client),修改git仓库里的配置文件,然后用post方式请求地址:http://localhost:8080/bus/refresh,如果返回成功,则config的所有客户端的配置都会动态刷新,详细演示参看视频


9、config的安全认证
见示例:10-ms-config-server-authenticating和10-ms-config-clientauthenticating
config服务端:10-ms-config-server-authenticating 添加依赖:


application.yml配置如下:


config客户端:10-ms-config-client-authenticating 在配置文件里bootstrap.yml里增加如下配置:


config与eureka配合使用。见示例:10-ms-config-server-eureka和10-ms-config-client-eureka


10、config配置中心的高可用
1、config server未注册到eureka上的情况,通过负载均衡器来实现


2、config server注册到eureka上的情况,client端也注册到eureka上,则已经实现高可用

=====================================================================================

提示:

消息总线刷新成功后,但是config client端,都不会更新,必须重新启动才能更新,

在使用的controller或service的类上加上一个注解@RefreshScope,这个注解必须加上才能起作用。

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值