簡體   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