2011-06-23 134 views
3

我需要讀取包含JSF Web應用程序中的一些配置數據的屬性文件。是getResourceAsStream()是線程安全的嗎?

眼下的代碼看起來像這樣

private Properties getConfig() { 
    Properties properties = new Properties(); 

    InputStream inputStream = null; 
    try { 
     inputStream = this.getClass().getResourceAsStream("/config.properties"); 

     try { 
     properties.load(inputStream); 
     } catch (IOException e) { 
     logger.error("Error while reading config properties", e); 
     } 

    } finally { 
     if (inputStream != null) { 
     try { 
      inputStream.close(); 
     } catch (IOException e) { 
      logger.error(e.getMessage(), e); 
     } 
     } 
    } 

    return properties; 
} 

它是安全的做這樣或那樣我能碰到併發問題當多個線程呼籲getConfig()?

+2

我不確定它是否線程安全或不正常,但通常在這種情況下,我使用單個色調配置類,其中我加載屬性文件一次,然後訪問它在任何我想要的地方。如果在部署後沒有人會更改屬性文件,則可以這樣做。 –

+0

是的,我首先使用了一些Singleton方法。但要求是文件可以隨時更改。 – Sylar

+0

這就是爲什麼我在我的評論中提到*這是可能的,因爲在部署後沒有人會更改屬性文件。* –

回答

4

不,這應該是完全安全的。在那裏我看不到任何併發問題。

但是,異常處理可能並不理想 - 如果您無法加載配置,是否有效返回空屬性對象,或者是否應該將異常傳播出getConfig()?真的......