如何在运行时更新 Spring Boot 应用程序的配置而不重新加载整个 ApplicationContext

Posted

技术标签:

【中文标题】如何在运行时更新 Spring Boot 应用程序的配置而不重新加载整个 ApplicationContext【英文标题】:How to update configuration of SpringBoot application at runtime without reloading whole ApplicationContext 【发布时间】:2016-01-26 17:46:05 【问题描述】:

我试图弄清楚如何在 Spring Boot 应用程序中动态更新/重新加载外部化配置,而无需重新启动整个应用程序。

大多数建议涉及在更改外部配置后重新加载 ApplicationContext,但这相当于重新启动整个应用程序,所以这并不是那么有用。

翻阅SpringBoot参考文档,找到了23.7 Typesafe Configuration Properties一章。

如果我理解正确,这允许定义简单的 POJO 类,将您的应用程序(外部化)配置值作为属性。

至少在理论上,这种方案可以用于将 bean 绑定到所需的配置 POJO 一次,并且在配置更改时只需更新 POJO 中的值。组件可以在下次访问 POJO 上的 getter 时轻松获取更改...

但是,我还没有弄清楚如何启用这种行为。当相关配置发生变化时,是否有一些非常明显的方法可以动态更新带有@ConfigurationProperties 注释的组件?

【问题讨论】:

【参考方案1】:

听起来您正在寻找由 Spring Cloud 提供的@RefreshScope。来自Spring Cloud documentation:

标记为@RefreshScope 的Spring @Bean 将在配置发生更改时得到特殊处理。这解决了只有在初始化时才注入配置的有状态 bean 的问题。例如,如果DataSource 在通过Environment 更改数据库URL 时打开了连接,我们可能希望这些连接的持有者能够完成他们正在做的事情。然后下次有人从池中借用连接时,他会使用新 URL 获得一个。

【讨论】:

看起来很有希望...谢谢

以上是关于如何在运行时更新 Spring Boot 应用程序的配置而不重新加载整个 ApplicationContext的主要内容,如果未能解决你的问题,请参考以下文章

如何自行部署 Spring Boot 应用程序

如何在 Eclipse Tomcat 中运行 Spring Boot 应用程序?

Spring Boot - 如何在不使用 spring 注释的情况下在运行时获取端口

运行 Spring Boot 应用程序时如何显示自动配置报告

如何防止我的 Spring Boot Batch 应用程序在执行测试时运行?

如何在运行时获取 SPRING Boot HOST 和 PORT 地址?