2012-11-22 59 views
0

我的Java EE應用程序包含許多子項目,它們應該使用單個配置文件連接到數據庫。我打算編寫一個Java類,並使其成爲一個獨立的jar來讀取來自datasource.xml的數據庫連接參數,這些參數將放在獨立jar的路徑中。獲取屬性文件的絕對路徑

我想問的問題:

  1. 如何動態獲取datasource.xml的絕對路徑?
  2. 第一個問題的解決方案可以在UNIX等所有操作系統中工作嗎?

回答

0

這是怎麼回事?在運行時轉換相對路徑絕對。我想這應該對所有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 

問候

0

你可以利用環境變量的

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 
2

你必須處理的第一個主題是存儲該文件。

根據您的問題,您將要將文件存儲在文件系統的某個位置,在實際應用程序包的外部。因此,你絕對需要知道文件真正位於文件系統的哪個位置才能訪問它;除非您使用環境變量來指示代碼文件所在的位置,否則無法預先得出結論。

更好的方法是使用JAR打包XML文件。那麼,你不必擔心絕對路徑了。只需使用Thread.currentThread().getContextClassLoader().getResource(),即可爲資源提供程序包樣式路徑,無論哪裏都可以找到它的參考。

如果無法將文件與JAR一起打包,則可以將其存儲在文件系統的目錄中,並將該目錄添加到服務器的類路徑查找序列中;一些應用程序服務器支持。然後,您仍然可以使用類加載器來查找資源,而無需知道其絕對位置。