网站首页 > java教程 正文
有时候在配置中心有些参数是需要修改的,这时候如何不重启而达到实时生效的效果呢?
本文基于以下讲解:
- 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技术栈,第一时间推送。
猜你喜欢
- 2024-10-10 架构师必须搞懂DNS,一篇文章 就够了
- 2024-10-10 Spring Boot 最核心的 25 个注解,都是干货!
- 2024-10-10 别再面向 for 循环编程了,JDK 自带的观察者模式就很香
- 2024-10-10 公司来了个新同事不会用 Lombok,还说我代码有问题
- 2024-10-10 Spring Boot 怎么打一个可执行 Jar 包?
- 2024-10-10 你必须了解Spring的生态(spring 生态)
- 2024-10-10 Java技术栈ppt分享:大数据+架构篇+算法篇(阿里巴巴内部资料)
- 2024-10-10 腾讯牛逼!终于开源了自家的 JDK——Kona
- 2024-10-10 Spring Boot Redis 实现分布式锁,真香
- 2024-10-10 响应式微服务架构设计,面向未来Java技术栈
你 发表评论:
欢迎- 最近发表
-
- Java常量定义防暴指南:从"杀马特"到"高富帅"的华丽转身
- Java接口设计原则与实践:优雅编程的艺术
- java 包管理、访问修饰符、static/final关键字
- Java工程师的代码规范与最佳实践:优雅代码的艺术
- 编写一个java程序(编写一个Java程序计算并输出1到n的阶乘)
- Mycat的搭建以及配置与启动(mycat部署)
- Weblogic 安装 -“不是有效的 JDK Java 主目录”解决办法
- SpringBoot打包部署解析:jar包的生成和结构
- 《Servlet》第05节:创建第一个Servlet程序(HelloSevlet)
- 你认为最简单的单例模式,东西还挺多
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)