重新加载除了一些豆类的春豆

时间:2015-07-29 12:24:51

标签: java spring spring-environment

我希望能够定期检查一些属性文件并相应地应用我的应用程序中的更改。

在我的java-spring应用程序中,我正在定期检查从文件系统加载的属性文件是否已更改:

Resource propsResource = new FileSystemResource("/path/to/properties/file");
File propertiesFile = propsResource.getFile();
long currentTimeStamp = propertiesFile.lastModified();
if (currentTimeStamp != lastModified) {
//File Changed
}

如果它已经更改,我想重新加载我的spring bean,因为其中一些实际上已加载conditionally中继属性文件中的属性值。

使用refresh方法没有做到这一点,所以我实际上正在调用close方法并重新创建我的上下文:

context.close();
context = new AnnotationConfigApplicationContext(AppConfig.class);

这就是诀窍。我的问题是我有一些包含缓存数据的bean,我不想丢失这些数据。 一种解决方案是继续使用此方法,但要确保我的缓存数据驻留在不由spring管理的类中(由我管理的静态或单例)。

另一种解决方案可能是在重新创建上下文之前复制我的缓存数据,然后将其设置回新创建的bean(那些包含缓存数据的bean),但这感觉非常难看。

对此有更好的方法吗?

1 个答案:

答案 0 :(得分:-1)

我宁愿不只是自己重新加载Context文件,让jvm来处理它。

对于您所面临的问题,您可能需要查看Jdk 1.7及更高版本中提供的Watcher服务。它的作用是,它检查特定目录中的文件是否被修改,如果它被修改,你可以覆盖该方法来完成你想做的事情。

Watcher service in jdk 1.7

相关问题