我的Java EE應用程序包含許多子項目,它們應該使用單個配置文件連接到數據庫。我打算編寫一個Java類,並使其成爲一個獨立的jar來讀取來自datasource.xml
的數據庫連接參數,這些參數將放在獨立jar的路徑中。獲取屬性文件的絕對路徑
我想問的問題:
- 如何動態獲取
datasource.xml
的絕對路徑? - 第一個問題的解決方案可以在UNIX等所有操作系統中工作嗎?
我的Java EE應用程序包含許多子項目,它們應該使用單個配置文件連接到數據庫。我打算編寫一個Java類,並使其成爲一個獨立的jar來讀取來自datasource.xml
的數據庫連接參數,這些參數將放在獨立jar的路徑中。獲取屬性文件的絕對路徑
我想問的問題:
datasource.xml
的絕對路徑?這是怎麼回事?在運行時轉換相對路徑絕對。我想這應該對所有enviroments工作...
File a = new File("/some/abs/path");
File parentFolder = new File(a.getParent());
File b = new File(parentFolder, "../some/relative/path");
String absolute = b.getCanonicalPath(); // may throw IOException
問候
你可以利用環境變量的
String path = System.getEnv("MYVARIABLE");
File datasource = path + "/datasource.xml";
或者閱讀來自屬性文件的位置可用在恆定位置
Properties props = new Properties();
try {
props.load("MyFixed.properties");
} catch(Exception e) {
e.printStackTrace(); // Can do better
}
String path = props.getProperty("datasource.path");
File datasource = path + "/datasource.xml";
Or pas S IN一個VM參數與-D
String path = System.getProperty("datasource.path");
File datasource = path + "/datasource.xml";
啓動罐時,並呼籲與
java -jar -Ddatasource.path=/my/path/to/datasource.xml my.jar
你必須處理的第一個主題是存儲該文件。
根據您的問題,您將要將文件存儲在文件系統的某個位置,在實際應用程序包的外部。因此,你絕對需要知道文件真正位於文件系統的哪個位置才能訪問它;除非您使用環境變量來指示代碼文件所在的位置,否則無法預先得出結論。
更好的方法是使用JAR打包XML文件。那麼,你不必擔心絕對路徑了。只需使用Thread.currentThread().getContextClassLoader().getResource()
,即可爲資源提供程序包樣式路徑,無論哪裏都可以找到它的參考。
如果無法將文件與JAR一起打包,則可以將其存儲在文件系統的目錄中,並將該目錄添加到服務器的類路徑查找序列中;一些應用程序服務器支持。然後,您仍然可以使用類加載器來查找資源,而無需知道其絕對位置。