[英]Java: Accessing properties file inside a war
我已經在StackOverflow中搜索了“戰爭中的屬性”,但是沒有一個結果適用於我的情況。
我正在使用Eclipse Galileo和GlassFish v3來開發一組Web服務。 我正在使用具有以下結構的“動態Web項目”
Src
-java_code_pkg_1
-java_code_pkg_2
-com.company.config
--configfile.properties WebContent
-META-INF
-WEB-INF
--log4jProperties
--web.xml
--applicationContext.xml
--app-servlet.xml
我想訪問“java_code_pkg1”中的一個源文件中的“configfile.properties”。 我正在使用Spring Framework,一旦應用程序在服務器上啟動,這個文件就會被實例化。
我試過以下沒有運氣
getResourceAsStream("/com.company.config/configfile.properties");
getResourceAsStream("/com/company/config/configfile.properties");
getResourceAsStream("com/company/config/configfile.properties");
getResourceAsStream("/configfile.properties");
getResourceAsStream("configfile.properties");
getResourceBundle(..) didn't work either.
當它不在WEB-INF / classes路徑下時是否可以訪問文件? 如果是的話怎么樣?
謝謝
Properties props = new Properties();
props.load(this.getClass().getResourceAsStream("/com/company/config/file.properties"));
我在調試模式時工作。 我可以在調試器中看到這些值,但是在執行“props.load”行之后,在進入它下面的燈之前,我得到一個NullPointerException。
那是一個不同的問題。 至少現在我知道這是訪問配置文件的方法。
謝謝您的幫助。
如果你在戰爭中,你的類路徑“當前目錄”是“WEB-INF / classes”。 簡單地上升兩個級別。
getResourceAsStream("../../com/company/config/configfile.properties");
這太可怕但它確實有效。 至少,它可以在tomcat,jboss和geronimo下工作,它今天起作用。
PS你的目錄結構不是很清楚。 也許它是:
getResourceAsStream("../../com.company.config/configfile.properties");
檢查WAR文件中屬性文件的位置。 如果它位於com / company / config目錄下的WEB-INF / classes目錄中,則getResourceAsStream("com/company/config/configfile.properties")
應該工作或getResourceAsStream(“如果配置文件不在WEB-INF下,這應該可以工作/ classes directoy
還可以嘗試使用getClass()。getClassLoader()。getResourceAsStream。
您確定該文件包含在您的war文件中嗎? 很多時候,war構建過程會過濾掉非.class文件。
一旦部署到服務器,路徑是什么? 可以使用Scanner手動讀入資源。 從包中的java文件,創建一個新文件(“../ applications /”)將獲得一個指向{glassfish install} \\ domains \\ {domain name} \\ applications的文件。 也許你可以改變那個文件路徑,引導你到你需要去的地方?
由於您使用的是Spring,因此請使用Spring中的Resource支持直接注入屬性文件。
請參閱http://static.springsource.org/spring/docs/3.0.x/reference/resources.html
即使需要屬性文件的類不是Spring管理的,您仍然可以訪問ApplicationContext並使用它來加載資源
資源類似於classpath:settings.properties,假設您的屬性文件被構建器拾取並放入war文件中。
您也可以直接從文檔中注入:
<property name="template" value="classpath:some/resource/path/myTemplate.txt">
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.