如何在运行时更新SpringBoot应用程序的配置,而无需重新加载整个ApplicationContext

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

大多数建议涉及在更改外部化配置后重新加载ApplicationContext,但这相当于重新启动整个应用程序,因此这并非真正有用。

通过阅读SpringBoot参考文档,我找到了第23.7章Typesafe配置属性 。

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

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

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

听起来你正在寻找由Spring Cloud提供的@RefreshScope 。 从Spring Cloud文档 :

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