Spring Cloud RefreshScope 刷新后挂钩

Posted

技术标签:

【中文标题】Spring Cloud RefreshScope 刷新后挂钩【英文标题】:Spring Cloud RefreshScope post-refresh hooks 【发布时间】:2016-08-06 14:27:31 【问题描述】:

是否有 @RequestScope 刷新后挂钩的概念?

用例: 我们需要推送配置更改。目前,这是手动的,并作为应用重启的一部分触发。但是,如果我们可以触发 /bus/refresh,一旦环境被刷新,而不是销毁 bean(在这种情况下是 @Service),但是一旦新的环境值被更新,就会触发一些配置更改?这样的事情可能吗?

【问题讨论】:

发布了一个 Spring Application 事件。在我的手机上,所以我不记得它是什么。 (刷新事件?)。 @spencergibb 谢谢。我会对此进行监控,看看是否能解决问题。 @spencergibb 我发现 RefreshEvent 和 RefreshScopeRefreshedEvent。还有,已经有一个 RefreshListener,看起来这是我真正想要在我的服务中实现的。是否已经公开了一个可以自动装配的 RefreshEndpoint? @RefreshScope bean 也是一个代理,其目标的生命周期与这些刷新事件相关联。因此,这是一种无需编写任何 Spring 特定代码即可对事件做出反应的好方法。如果这不起作用,我想我不理解用例。 @DaveSyer 那是我最初的目标,但是,他们不希望 bean 被销毁。我发现了更多关于他们为什么想要这个的信息。这是一个搜索过程,这种特殊情况与能够随意手动调整缓存大小有关。我不会详细说明他们为什么要以这种方式这样做,但这是要求。这是一个旧版应用,听起来需要对其进行重构以利用更好的缓存技术。 【参考方案1】:

我使用的解决方案是让我的@Service 实现 ApplicationListener 并覆盖 onApplicationEvent(RefreshRemoteApplicationEvent 事件)。这已在 RefreshListener 中执行,但我的实现能够检查更改的键并根据客户端为特定键更改设置的规则做出反应。

【讨论】:

RefresheRemoveApplicationEvent? 啊,那应该是远程的,而不是删除。我会更新的。

以上是关于Spring Cloud RefreshScope 刷新后挂钩的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud @RefreshScope 原理分析:扫描 Bean 定义

Spring Cloud RefreshScope 刷新后挂钩

Spring Cloud @RefreshScope 原理分析:代理类的创建

Spring Cloud Config Server 并在整个 Spring Boot 应用程序上应用 @RefreshScope

Spring boot 2.0 消息总线(Spring Cloud Bus) 高可用分布式配置中心 实例

深入理解Spring Cloud一(4)Bean中的属性是如何刷新的?