繁体   English   中英

重新加载春季豆(不包括某些豆)

[英]Reload spring beans excluding some beans

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

在我的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),但这感觉非常丑陋。

有更好的方法吗?

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

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

JDK 1.7中的Watcher服务

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM