【问题标题】:Update spring beans dynamically. Is it possible?动态更新 spring bean。可能吗?
【发布时间】:2023-03-23 18:02:01
【问题描述】:

如果 Spring bean 配置发生变化,有没有办法动态更新 Spring bean?

例如假设我有一个带有布尔属性x 的spring bean,并且当应用程序启动时spring bean 的值是true

因此 spring 创建了将属性 x 设置为 true 的 bean。

有没有办法让如果我将属性更改为x(在应用程序运行时)该属性将被更新,例如到false

【问题讨论】:

标签: java spring


【解决方案1】:

调用 x setX() 方法的 setter 即可。

但它不应该是原型 bean。

【讨论】:

  • 我问的是修改xml配置文件。
  • 哦!那是什么?那可能吗?是的,覆盖你的 xml 文件,但这不会改变任何东西。它已经加载,对您在随机存取内存中运行的实例没有更多影响。 :(
【解决方案2】:

jrebel-spring 集成是可能的。它会监控您的配置并尝试在运行时重新连接您的 bean。

虽然我不会在生产中使用它...仅用于玩耍、测试等

【讨论】:

  • EULA 不允许在生产中使用此工具。 JRebel 专门设计用于开发。
【解决方案3】:

Spring 在启动时读取配置文件。如果您确实需要在应用程序运行时更新配置,您应该手动实现所有链:检测配置更改、验证配置、检测更改的 bean、更新上下文中的 bean。

【讨论】:

  • 这条路很难走。您可以查看 spring 源代码以查找验证和 bean 加载功能,但其他步骤应由您实现。你真的需要这个吗?其他方法是更新bean而不更新配置或从配置创建新的Spring上下文并替换现有的
【解决方案4】:

Spring bean 可以使用 applicationContext.xml 甚至以编程方式进行初始化。在你的情况下;您将需要从 xml 中删除配置并添加到 java 程序中。你可以从How to programmatically create bean definition with injected properties? 得到一些想法。其他好的链接也可以在 google 上找到。

【讨论】:

  • 请教管理员手动修改xml配置文件
猜你喜欢
  • 2011-07-16
  • 1970-01-01
  • 2021-11-02
  • 1970-01-01
  • 2011-01-23
  • 1970-01-01
  • 1970-01-01
  • 2020-11-02
  • 2017-02-27
相关资源
最近更新 更多