首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
30 篇文章
1
可视化接口管理平台 YApi,让你轻松搞定 API 的管理问题
2
面试必考:秒杀系统如何设计?
3
Spring Boot 中的线程池,这也太好用了!
4
用了很多年的 CMS 垃圾收集器,终于换成了 G1,真香!!
5
雪花算法到底是啥原理?附 Java 实现!
6
SpringBoot:优雅地处理全局异常
7
七种分布式事务的解决方案,一次讲给你听!
8
RabbitMQ 死信队列是什么鬼?
9
RabbitMQ 中的消息还能过期?
10
来,通过 Excel 来认识神器——POI
11
使用easypoi导出excel
12
图文并茂:AQS 是怎么运行的?
13
使用 Docker 部署 Spring Boot 项目,带劲!!
14
写了个牛逼的日志切面,甩锅更方便了!
15
终于有人把 Spring 循环依赖讲清楚了!
16
免费获取 IntelliJ IDEA 激活码的 6 种方式!
17
Spring Boot 如何快速集成 Redis 哨兵?
18
10w+ Excel 数据导入,怎么优化?
19
10 个牛逼的单行代码编程技巧,你会用吗?
20
Logback 配置文件这么写,TPS 提高 10 倍!
21
18 个示例带你掌握 Java 8 日期时间处理!
22
用户密码到底要怎么加密存储?
23
Spring Cloud 如何动态刷新 Git 仓库配置?
24
为什么微服务一定要有网关?
25
牛逼哄哄的数据库连接池,底层原理是个啥?
26
如何快速安全的插入千万条数据?
27
Redis 是怎么实现 “附近的人” 的?
28
20 亿的 URL 集合,如何快速判断其中一个?
29
不用找了,大厂在用的分库分表方案,都在这了!
30
Java 程序员常犯的 10 个 SQL 错误!

Spring Cloud 如何动态刷新 Git 仓库配置?

有时候在配置中心有些参数是需要修改的,这时候如何不重启而达到实时生效的效果呢?

本文基于以下讲解:

  • Spring Cloud Greenwich.SR3
  • Spring Boot 2.1.7.RELEASE
  • 基于 Git 的配置中心仓库

添加 actuator 依赖

在引用配置中心的项目中添加以下 actuator 依赖:

代码语言:javascript
复制
<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 端点的,需要我们主动暴露,在引用配置中心的项目中添加以下配置:

代码语言:javascript
复制
management:
  endpoints:
    web:
      exposure:
        include: refresh,info,health

添加刷新范围

引用了配置中心的项目,在需要刷新的 Bean 上添加 @RefreshScope 注解。

示例1:

代码语言:javascript
复制
@RefreshScope
@RestController
public class TestController {

    @Value("${username}")
    private String username;

...

}

示例2:

代码语言:javascript
复制
@RefreshScope
@ConfigurationProperties(prefix = "spring.mail")
public class MailProperties {

...

}

当配置更改时,标有 @RefreshScopeBean 将得到特殊处理来生效配置,不然改了配置不会刷新的。@RefreshScope 的原理可以参考这篇文章:Spring Cloud @RefreshScope 原理是什么?,很详细。

手动刷新配置

修改配置后,我们可以通过 post 到 /actuator/refresh 即可手动刷新配置。

如下图所示:

如果参数有变更,刷新成功的话,会返回一个含有参数名的变更数组。

自动刷新配置

如果你使用了 Gitlab 或者 Github 仓库,可以配置 Webhooks 来做到自动更新,当参数变更时,能做到自动通知。

Gitlab配置如下图所示:

Github也差不多的,可以配置一个 URL(用于变更通知)和一个 Secret Token(用于请求验证)。

但这种方式仅限于单台,如果有多台或者多个系统,该如何通知,恐怕需要加一个公共接口来绕一圈了。

如果需要请求头认证的,可以使用这种方式:

https://user:password@ip:port/xxxx

扩展问题

如果使用配置中心项目少的情况,我们是可以通过上面的方式进行配置动态刷新,如果项目比较复杂的情况呢?

上面的方式肯定都是行不通的,Spring Cloud Bus 消息总线可以解决配置修改的真正的动态刷新,请看下回分解。

下一篇
举报
领券