2009-09-01 45 views
9

所以我試圖在我的項目中添加一些功能,以允許我的部署工件中使用用戶定義的屬性 - 一個簡單的鍵:值.properties文件。我放置service.properties文件如何在Google App Engine中加載屬性文件?

war/WEB-INF/my-service.properties 

在我ServiceImpl.java構造我有以下幾點:

String propertiesFileName = "my-service.properties"; 

URL propertyURL = ClassLoader.getSystemResource(propertiesFileName); 
URL propertyURL2 = this.getClass().getClassLoader().getResource(propertiesFileName); 
URL propertyURL3 = this.getClass().getClassLoader().getResource("WEB-INF/" + propertiesFileName); 
URL propertyURL6 = this.getClass().getClassLoader().getResource(
     "E:/Projects/eclipse-workspace/projectName/war/WEB-INF/" + propertiesFileName); 

物業URL的所有實例都爲空。我知道我錯過了一些絕對明顯的東西,但我需要第二雙眼睛。問候。

編輯:

嗯,好像我很困惑作爲默認GAE項目將在/戰爭logging.properties文件。來自Google App Engine documentation:

App Engine Java SDK在appengine-java-sdk/config/user /目錄中包含一個模板logging.properties文件。要使用它,請將文件複製到您的WEB-INF/classes目錄(或WAR中的其他地方),然後將系統屬性java.util.logging.config.file複製到「WEB-INF/classes/logging.properties」(或無論您選擇哪條路徑,相對於應用程序根目錄)。您可以在appengine-web.xml文件中設置系統屬性,如下所示:

+0

我認爲這是你的問題而不是你的應用程序的錯字,但你聲明你的文件被稱爲「service.properties」,但propertiesFileName被設置爲「my-service.properties」! – 2009-09-01 14:22:55

+0

@Todd:是的,這是一個錯字,我會糾正它。 – 2009-09-01 14:41:57

回答

9

嘗試將service.properties放入WEB-INF/classes中。然後,它應該是可訪問的只是:

this.getClass().getClassLoader().getResourceAsStream("/filename.properties"); 
+0

你知道爲什麼我需要刪除路徑開始處的「/」以使其起作用嗎? – Mike 2015-07-29 22:01:36

0

我認爲你需要的是這樣的:

字符串文件路徑=的ServletContext.getRealPath( 「/ WEB-INF /視圖/」)+「/ 「+ mav.getViewName()+」.vm「; FileInputStream in = new FileInputStream(filePath);

我從spring獲得servletContext:@Autowire ServletContext。

0

正如他對jsight的答案評論中提及Mike,它的工作對我來說,如果我將文件放到WEB-INF/classes中後使用

this.getClass().getClassLoader().getResourceAsStream("filename.properties"); 

(除去第一個斜槓)。