2015-04-23 44 views
1

我創建了一個Web應用程序,並在已添加到classpath的獨立文件夾中有一個屬性文件。我正在使用屬性對象在沒有重複構建Web應用程序的情況下獲取屬性文件中的更改

public static Properties getProps() { 
    Properties properties = new Properties(); 
    try { 
     properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("mdmdemo.properties")); 
    } catch (IOException ex) { 
     Logger.getLogger(BasicUtils.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    return properties; 
} 

獲取密鑰沒有問題。但是,儘管我將屬性文件放置在戰爭之外,但在構建和部署戰爭之前,我無法看到prop文件中所做的更改。我還重複創建新的屬性對象以查看更改,而不僅僅是在Web應用程序初始化中。

我知道,在這種情況下使用數據庫是一個更好的解決方案,但我不允許這樣做。

如何獲取更改?

+0

如果'getProps()'僅在部署戰爭時調用,則永遠不會注意到屬性文件中的更改。您需要在包含該文件的目錄上設置監視服務。查看[觀看目錄以瞭解更改](https://docs.oracle.com/javase/tutorial/essential/io/notification.html) –

+0

我在servlet的doGet()函數中調用getProp()。該頁面本身定期刷新。我認爲這應該夠了,我錯了嗎? – ismailkuyu

+0

聽起來像它應該是足夠的。 –

回答

0

緩存可能是特定於CassLoader的。如果你使用Tomcat,這可能幫助:

ClassLoader ctxLoader = Thread.currentThread().getContextClassLoader(); 
 
URL resURL = ctxLoader.getResource(resName); 
 
URLConnection resConn = resURL.openConnection(); 
 
resConn.setUseCaches(false); 
 
InputStream resIn = resConn.getInputStream();

+0

不,那也行不通。儘管我使用jboss,但我嘗試過,但沒辦法。 – ismailkuyu

相關問題