Spring Cloud - 配置管理(Spring Cloud Config)
为什么需要配置管理?
首先来谈谈“配置分离”的必要性。所谓配置分离,指的是把配置文件和应用代码分离开来,这样做有很多好处:
- 可以统一管理配置,把多个应用的配置文件放到一个仓库下。
- 可以复用配置,多个应用可能有一些配置是相同的,可以复用的。
- 修改配置文件不用打包。如果配置文件不分离,一旦我们修改一个小的配置,就需要触发新的CI/CD Pipeline,重新打包、上传到nexus等资源库等操作。
除此之外,我们可能还想要能够在运行期间动态地去修改配置。于是微服务的配置管理工具应运而生,在Spring Cloud生态中,也几个配置管理工具,比如Spring Cloud Consul和Spring Cloud Zookeeper都能提供K-V存储,所以也能同时作为配置管理工具。而Spring Cloud Config是一款专为配置管理而生的更强大的工具。
当然,也有外部的一些开源的配置管理工具,比如携程的Apollo项目。
Spring Cloud Config简介
Spring Cloud Config(以下简称Config)是Spring Cloud旗下的一个子项目,目前已经发展成熟,可以直接用在生产环境上。Config支持非常多的配置数据源。比如Git、SVN、文件系统、Vault、数据库等等。比较常见的是使用Git进行存储。那它具体是怎么工作的呢?这里有一个Config的架构图:
首先我们需要有一个远程的Git仓库,用于存放所有的配置文件。然后要有一个Config Server,用于和微服务配合来统一管理配置。Config Server拉取远程的Git仓库存放到本地。
对于远程Git仓库认证,可以使用HTTPS+用户名密码的方式,也可以使用私钥的方式,推荐使用私钥。
失败快速相应
Spring Cloud Config的客户端会预先加载很多其他信息,然后再开始连接Config Server进行属性的注入。当我们构建的应用较为复杂的时候,可能在连接Config Server之前花费较长的启动时间,而在一些特殊场景下,我们又希望一可以快速知道当前应用是否能顺利地从Config Server获取到配置信息,这对在初期构建调试环境时,可以减少很多等待启动的时间。要实现客户端优先判断Config Server获取是否正常,并快速响应失败内容,只需要在bootstrap.properties中加入如下代码即可:
spring:
cloud:
config:
failFast: true
重试
在Config Server宕机或是客户端配置不正确导致连接不到而启动失败的情况,快速响应的配置可以发挥比较好的效果。但是,若只是因为网络波动等其他问歇性原因导致的问题,直接启动失败似乎代价有些高。所以,Config客户端还提供了自动重试的功能,在开启重试功能前,先确保己经配置了spring.cloud.config.fail-fast=true,再进行下面的操作。
添加maven依赖:
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
动态刷新配置
顾名思义,为了可以动态获取配置信息。
添加maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
在获取配置信息的api上增加
@RefreshScope
注解。
使用Spring Cloud Config
总的来说使用还是不难。按照官方文档一步一步做就行了。也可以参考我的代码配置管理(Spring Cloud Config)
在读取配置文件不再写ip地址,而是服务名,这时如果配置服务部署多份,通过负载均衡,从而高可用。
还没有评论,来说两句吧...