我正在使用EJB 3.0和CDI開發將部署在Websphere應用程序服務器中的java ee應用程序。 我有一個要求有一個屬性文件,我從中讀取特定的配置參數,這個屬性文件應該駐留在我的代碼將被部署的主機系統的文件系統中。 屬性文件的基本路徑(將放置屬性文件的目錄)配置爲Websphere應用程序服務器中的名稱空間綁定字符串資源。在Java EE應用程序中從FileSystem中加載屬性文件
目前我編寫了一個Utility類來檢索和使用如下所示的屬性文件。
@Singleton
public class AppPropertyUtil {
private static Hashtable apppProperties;
@Resource(name="jndi/basePath",lookup="jndi/basePath")
private static String basePath;
private static final Logger LOGGER = LoggerFactory.getLogger(AppPropertyUtil.class);
protected void loadPropertyBundleFromFileSystem(String path)
{
InputStream inputStream = null;
Properties properties = null;
try {String fullPath=basePath+"/"+path+".properties";
LOGGER.info("Property file path : "+fullPath);
inputStream = new FileInputStream(new File(fullPath));
if (inputStream != null) {
properties = new Properties();
properties.load(inputStream);
LOGGER.info("Properties loaded");
apppProperties = (Hashtable)properties;
}
} catch (FileNotFoundException exception) {
LOGGER.error("Cannot read property bundle ",exception);
}
catch (IOException | IllegalArgumentException exception) {
LOGGER.error("Unable to loadproperties ",
exception);
}
}
public String getProperty(String key)
{
if(apppProperties == null)
{
loadPropertyBundleFromFileSystem("AppProps");
}
Object value = apppProperties.get(key);
if(value != null){
return (String) value;
}
return null;
}
}
但是擁有@Resource註解將要求將AppPropertyUtil類注入任何希望使用它的類中。所以,我不能在任何沒有管理的POJO類中使用它。
請幫助我瞭解這是最好的方法來滿足上述要求還是可以改進。我也想讓getProperty方法和loadPropertyBundleFromFileSystem方法是靜態的,以便從靜態上下文中使用它,但這不可能,因爲該類應該被注入來使用。
在此先感謝
第一個建議將班級作爲服務看起來不錯:)。我已經實現了第一個選項,通過重新設計類來充當啓動EJB Singleton服務並使其返回屬性映射。它現在有效.. – Jegajeeth