Spring Cloud 如何动态刷新 Git 仓库配置?
有时候在配置中心有些参数是需要修改的,这时候如何不重启而达到实时生效的效果呢?
本文基于以下讲解:
- Spring Cloud Greenwich.SR3
- Spring Boot 2.1.7.RELEASE
- 基于 Git 的配置中心仓库
添加 actuator 依赖
在引用配置中心的项目中添加以下 actuator 依赖:
<dependencies>
...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
...
</dependencies>
spring-boot-starter-actuator:这个模块的 /actuator/refresh (POST请求)端点可以刷新配置,更多的使用参考 Spring Boot 系列文章。
暴露 refresh 端点
actuator 默认是不暴露 refresh 端点的,需要我们主动暴露,在引用配置中心的项目中添加以下配置:
management:
endpoints:
web:
exposure:
include: refresh,info,health
添加刷新范围
引用了配置中心的项目,在需要刷新的 Bean 上添加 @RefreshScope 注解。
示例1:
@RefreshScope
@RestController
public class TestController {
@Value("${username}")
private String username;
...
}
示例2:
@RefreshScope
@ConfigurationProperties(prefix = "spring.mail")
public class MailProperties {
...
}
当配置更改时,标有 @RefreshScope 的 Bean 将得到特殊处理来生效配置,不然改了配置不会刷新的。@RefreshScope 的原理可以参考这篇文章:Spring Cloud @RefreshScope 原理是什么?,很详细。
手动刷新配置
修改配置后,我们可以通过 post 到 /actuator/refresh 即可手动刷新配置。
如下图所示:

如果参数有变更,刷新成功的话,会返回一个含有参数名的变更数组。
自动刷新配置
如果你使用了 Gitlab 或者 Github 仓库,可以配置 Webhooks 来做到自动更新,当参数变更时,能做到自动通知。
Gitlab配置如下图所示:

Github也差不多的,可以配置一个 URL(用于变更通知)和一个 Secret Token(用于请求验证)。
但这种方式仅限于单台,如果有多台或者多个系统,该如何通知,恐怕需要加一个公共接口来绕一圈了。
如果需要请求头认证的,可以使用这种方式:
https://user:password@ip:port/xxxx
扩展问题
如果使用配置中心项目少的情况,我们是可以通过上面的方式进行配置动态刷新,如果项目比较复杂的情况呢?
上面的方式肯定都是行不通的,Spring Cloud Bus 消息总线可以解决配置修改的真正的动态刷新,请看下回分解。关注微信公众号:Java技术栈,第一时间推送。
Spring Cloud 如何动态刷新 Git 仓库配置?的更多相关文章
- Spring Cloud(七):配置中心(Git 版与动态刷新)【Finchley 版】
Spring Cloud(七):配置中心(Git 版与动态刷新)[Finchley 版] 发表于 2018-04-19 | 更新于 2018-04-24 | Spring Cloud Confi ...
- Spring Cloud Config采用Git存储时两种常用的配置策略
由于Spring Cloud Config默认采用了Git存储,相信很多团队在使用Spring Cloud的配置中心时也会采用这样的策略.即便大家都使用了Git存储,可能还有各种不同的配置方式,本文就 ...
- SpringCloud实战之初级入门(三)— spring cloud config搭建git配置中心
目录 1.环境介绍 2.配置中心 2.1 创建工程 2.2 修改配置文件 2.3 在github中加入配置文件 2.3 修改启动文件 3. 访问配置中心 1.环境介绍 上一篇文章中,我们介绍了如何利用 ...
- Spring Cloud config之一:分布式配置中心入门介绍
Spring Cloud Config为服务端和客户端提供了分布式系统的外部化配置支持.配置服务器为各应用的所有环境提供了一个中心化的外部配置.它实现了对服务端和客户端对Spring Environm ...
- Spring Cloud(八):配置中心(服务化与高可用)【Finchley 版】
Spring Cloud(八):配置中心(服务化与高可用)[Finchley 版] 发表于 2018-04-19 | 更新于 2018-04-26 | 本文接之前的<Spring Clou ...
- Spring Cloud第十一篇 | 分布式配置中心高可用
本文是Spring Cloud专栏的第十一篇文章,了解前十篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cl ...
- Spring Cloud(九):配置中心(消息总线)【Finchley 版】
Spring Cloud(九):配置中心(消息总线)[Finchley 版] 发表于 2018-04-19 | 更新于 2018-05-07 | 我们在 Spring Cloud(七):配置中心 ...
- Spring Cloud Config 1 (分布式配置中心)
spring cloud config是spring cloud团队创建的一个全新的项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端和客户端两部分. 服务端也被称为 ...
- 【SpringCloud构建微服务系列】使用Spring Cloud Config统一管理服务配置
一.为什么要统一管理微服务配置 对于传统的单体应用而言,常使用配置文件来管理所有配置,比如SpringBoot的application.yml文件,但是在微服务架构中全部手动修改的话很麻烦而且不易维护 ...
随机推荐
- H3C 配置CHAP验证
- 一次操作系统报错OutOfMemory Error的处理记录
在启动公司内嵌的tomcat容器时出现报错, 如下: # There is insufficient memory for the Java Runtime Environment to contin ...
- 初次使用pycharm 的interpreter option为空解决办法。
第一步:进入Setting. 第二步:进入Project中的Project Interpreter.选择添加即可.
- 2019-9-2-C#同步方法转异步
title author date CreateTime categories C#同步方法转异步 lindexi 2019-09-02 12:57:37 +0800 2018-2-13 17:23: ...
- H3C查看保存的配置文件
- 解决应用服务器变为集群后的Session问题
2.2.4.2 解决应用服务器变为集群后的Session问题 先来看一下什么是Session. 用户使用网站的服务,基本上需要浏览器与Web 服务器的多次交互.HTTP 协议本身是无状态的,需要基于H ...
- dotnet 通过 WMI 获取系统安装的驱动
本文告诉大家如何通过 WMI 获取用户已经安装的驱动程序 通过 Win32_SystemDriver 可以获取用户已经安装的驱动程序 var mc = "Win32_SystemDriver ...
- 【Kubernetes】容器集群管理常用命令笔记
一.集群部署-查询集群状态 ①查询k8s master各组件健康状态: kubectl get componentstatus ②查询k8s node健康状态: kubectl get node 二. ...
- 魅族--魅蓝metal
评论:金属潮流平民化
- Mybase desktop7.3破解
1.Mybase Desktop 7.3 安装包 百度云链接: 链接:https://pan.baidu.com/s/1mWZ2_Qmkf6aAX9CYgrN12A 提取码:vjw7 2.破解包 百度 ...