【发布时间】:2015-08-21 18:51:49
【问题描述】:
在我的应用程序中,在服务器启动期间,spring bean DAO 类从数据库中读取值并使用 spring jdbc 模板存储在哈希图中。
我需要在运行时重新加载一组特定的 bean,而无需重新启动应用服务器。
下面是我的代码 sn-p。如果需要,我可以发布更多内容
private void setMessageDetails() {
messageContentDetails= namedParameterJdbcTemplate.queryForObject(messageContentSql,nameParamMap, new MessageContentRowMapper());
}
MessageContentRowMapper.java maps the resultset values to valuesMap below
public class MessageContentDetails {
private Map<String, Map<String, String>> valuesMap= new HashMap<String, Map<String, String>>();
..setters/getters..
}
现在,如果任何 DB 值发生变化,我需要重新初始化 MessageContentDetails.java 并使用新值更新 hashmap,并且还需要在应用程序启动期间之前自动装配/注入的地方再次自动装配此类的引用。
我的问题是
- 我能否使用 applicationContext.refresh() 方法刷新一个或一组 Spring bean。
- 有没有更好的方法来重新加载具有一些需要在运行时重新加载的静态值的 spring bean?
- 使用此方法可能对线程产生什么影响。我的应用程序分布在 3 个具有多个 jvm 的不同数据中心。
任何指向我上述问题的链接都会非常有帮助。
我使用的是 JAVA 1.6 WebSphere Spring 3.1.0 版本,MessageContentDetails bean 是在 spring xml 中配置的 spring bean,没有注释。
【问题讨论】:
-
可能为时已晚,但是:en.wikipedia.org/wiki/OSGi
-
仅供参考,我不相信您可以刷新特定的 bean 集,它应该是全部或没有。
-
@John 可以说我将我的 spring bean 定义拆分为单独的 xml,我可以只重新加载可能包含所有需要重新加载的 bean 的特定 xml 吗?我的意思是这能解决我的目的吗
-
@John 使用 OSGI 为时已晚。我将如何研究它。我想知道多线程的影响及其在重新加载 spring bean 时的影响。
-
如何知道这些数据库更改何时发生,这是手动步骤吗?
标签: java spring spring-mvc