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

Rol*_*epp 5 java configuration spring spring-boot

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

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

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

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

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

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

And*_*son 8

听起来你正在寻找@RefreshScopeSpring Cloud提供的.从Spring Cloud文档:

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