如何使用Spring重新加载属性?

2022-09-03 14:19:09

我正在使用Spring 3的属性文件。当Spring初始化其contex时,它会加载属性文件并将其放入所有bean中,并带有@Value注释。

我希望有可能更新文件中的一些属性,并在服务器上公开一个JMX,它将新属性重新加载到Spring - 而无需重新启动服务器并重新加载其上下文。

我是否可以通过使用一些Spring方法来重新加载属性并将其填充到所有bean中来实现这一点,或者我应该自己编写类似的东西?


答案 1

我建议用Apache Commons Configuration项目中的a替换它。它支持自动重新加载,通过检测文件何时更改,或通过 JMX 触发。java.util.PropertiesPropertiesConfiguration


答案 2

我认为没有共同的方法可以做到这一点。最“干净”的方法是关闭Spring上下文并从头开始构建它。例如,考虑使用 DBCP 连接池并更新其数据库连接 URL。这意味着必须正确关闭池,然后必须创建新对象,然后还必须更新对池的所有引用。现在,某些 Bean 可能会从该池获取连接,并且更新池配置意味着您需要以某种方式重新请求连接。因此,豆类可能需要知道如何做到这一点,这并不常见。

我建议使用配置和更新事件创建单独的bean,并将该bean作为您需要了解的有关配置更改的所有Bean的依赖项。然后,您可以使用Apache Commons Configuration来获取文件更改并传播配置更新。

也许使用JMS是好的(如果你以后要分发你的应用程序)。