Spring Cloud 动态刷新配置信息

本文介绍如何在SpringBoot中实现配置的动态刷新而不重启应用,通过添加spring-boot-starter-actuator依赖及使用@RefreshScope注解实现配置的实时更新,并提及了在复杂项目中利用SpringCloud Bus解决配置动态刷新的问题。

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

添加依赖

<dependencies>
    ...
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>   
    ...
</dependencies>

spring-boot-starter-actuator:这个模块的/refresh(POST请求)端点可以刷新配置,更多的使用参考Spring Boot系列文章。

生效前提

在需要刷新的Bean上添加@RefreshScope注解。

@RefreshScope
@RestController
public class TestController {

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

当配置更改时,标有@RefreshScope的Bean将得到特殊处理来生效配置。

扩展问题

如果项目少配置少的情况可以通过/refresh来手动刷新配置,如果项目比较复杂的情况呢这种肯定是行不通的,Spring Cloud Bus消息总线可以解决配置修改的真正的动态刷新。

推荐:Spring Boot & Cloud 最强技术教程

扫描关注我们的微信公众号,干货每天更新。

image
### 实现 Spring Cloud 动态刷新配置Spring Cloud 生态系统中,可以利用多种组件和技术来实现配置动态刷新。主要通过引入特定依赖并使用相应的注解完成。 对于基于 Spring Cloud Config 和 Spring Cloud Bus 的方案,在项目中需添加 `spring-cloud-starter-bus-amqp` 或者 `spring-cloud-starter-bus-kafka` 作为消息总线的支持[^1]。当配置发生变化时,会发送一个事件到消息队列里;各个微服务订阅该主题的消息,接收到通知后调用 `/actuator/refresh` 接口触发本地缓存更新从而达到热加载的效果。 而在 Spring Cloud Alibaba 场景下,则推荐采用 Nacos 作为统一配置管理中心。为了使应用程序能够响应来自 Nacos Server 上配置项的变化而无需重启实例,应该先确保 pom 文件中有如下 Maven 依赖: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-nacos-config</artifactId> </dependency> ``` 之后,在启动类上加上 `@RefreshScope` 注解使得被标记过的 Bean 支持属性重新注入的功能[^2]。另外还需要注意的是,如果想要让某些字段跟随远程配置变动即时生效的话,除了给这些成员变量所在的类打上此标签外,也建议它们本身声明成非静态形式以便于框架自动处理其生命周期内的值替换逻辑。 最后一步就是编写业务代码了,比如定义一个 RESTful API 来暴露对外部修改后的最新参数获取接口,或者直接监听某个特殊环境变量的状态改变等等方式均可满足实际需求场景下的灵活性要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值