如何在运行时更新 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的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Eclipse Tomcat 中运行 Spring Boot 应用程序?
Spring Boot - 如何在不使用 spring 注释的情况下在运行时获取端口
运行 Spring Boot 应用程序时如何显示自动配置报告