如何用Spring重新加载属性?

Jul*_*ias 15 java spring properties

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

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

我可以通过使用一些Spring方法重新加载属性并将它们填充到所有bean来实现它,或者我应该自己写这样的东西吗?

Emm*_*urg 10

我会建议更换java.util.PropertiesPropertiesConfigurationApache的共享配置项目.它通过检测文件何时更改或通过JMX触发来支持自动重新加载.


jde*_*lop 5

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

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

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