2

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

在我的 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,因为其中一些实际上是根据属性文件中的属性值有条件地加载的。

使用refresh方法并没有解决问题,所以我实际上是在调用close方法并重新创建我的上下文:

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

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

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

有更好的方法吗?

4

1 回答 1

-1

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

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

jdk 1.7 中的观察者服务

于 2015-07-29T13:06:54.687 回答