我试图弄清楚如何在不重新启动整个应用程序的情况下动态更新/重新加载Spring Boot应用程序中的外部化配置。
大多数建议都涉及在更改外部化配置之后重新加载ApplicationContext,但这等效于重新启动整个应用程序,因此这实际上并不是那么有用。
通读SpringBoot参考文档,我发现了第23.7章Typesafe配置属性。
如果我对它的理解正确,则可以定义简单的POJO类,该类将把您的应用程序(外部化)的配置值作为属性保存。
至少从理论上讲,该方案只能用于将bean绑定到所需的配置POJO一次,并且在配置更改时只需更新POJO中的值即可。组件下次访问POJO上的getter时,可以轻松获取更改。
但是,我还没有弄清楚如何启用这种行为。@ConfigurationProperties当相关配置发生更改时,是否有某种明显的方法可以动态更新带有注释的组件?
@ConfigurationProperties
听起来您正在寻找@RefreshScope由Spring Cloud提供的内容。从Spring Cloud文档中:
@RefreshScope
更改配置后@Bean,标记为的Spring @RefreshScope将得到特殊处理。这解决了有状态bean仅在初始化时才注入其配置的问题。例如,如果DataSource通过更改数据库URL时a 具有开放的连接Environment,我们可能希望这些连接的持有人能够完成其工作。然后,下次有人从池中借用连接时,他将获得一个带有新URL的连接。
@Bean
DataSource
Environment