簡體   English   中英

從tomcat webapps文件夾中讀取屬性文件

[英]Reading Property file from tomcat webapps folder

我已將屬性文件放置在tomcat的webaaps文件夾中,但無法訪問它。 我的代碼是

InputStream is = ClassLoader.getSystemResourceAsStream("database.properties");
if(is == null){
    is = ClassLoader.getSystemClassLoader().getResourceAsStream("database.properties");
}
if(is == null){
    is = ClassLoader.getSystemClassLoader().getResourceAsStream("/database.properties");
}
if(is == null){
    is = ClassLoader.getSystemClassLoader().getResourceAsStream("/webapps/database.properties");
}
if(is == null){
    is = ClassLoader.getSystemClassLoader().getResourceAsStream("webapps/database.properties");
}

不過,我將輸入流作為null。

getSystemResourceAsStream方法返回null表示在類路徑的指定位置找不到資源。 這很有意義,因為$TOMCAT_HOME/webapps不在類路徑中。

因此,要么將該文件放在應用程序的類路徑中的目錄中(並且如果您想在戰爭之外使用它,則必須將其放入$CATALINA_HOME/lib -並附帶所有隱含的后果)或更改您的方法(使用JNDI存儲屬性,使用絕對路徑等)。

參考

要通過類路徑訪問屬性文件,我將這些文件放在“ webapp / WEB-INF / classes”中。

這樣做是標准的,並且是避免絕對路徑問題的好方法。

如果您的項目具有標准的Maven結構,則由Maven管理:

  • 來源在“ src / main / java”中
  • 屬性在“ src / main / resources”中

當Maven打包Web應用程序時,將在“ webapp / WEB-INF / classes”中編譯類,並將資源復制到同一目錄。

您無法以這種方式訪問​​Web應用程序外部的文件。 該文件不在您的類路徑中,因此無法通過“ ClassLoader”獲得它。 將其放入您的類路徑(在* .war內部)或按以下方式訪問它:

File f = new File("/absolute/path/to/your/file");
InputStream is = new FileInputStream(f);

但是tomcat/webapps仍然不是屬性文件的好地方。 也許是用戶的主目錄? 然后您可以像這樣訪問它:

String home = System.getProperty("user.home");
File f = new File(home + "/yourfile.properties");

需要使用包含此文件的文件夾名稱更新classpath。 我做到了。 我在Eclipse,tomcat和獨立Java中做過

java -cp。:$ CLASSPATH:some / location / your / config yourclass

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM