我有一个AppEngine应用程序有两个不同的实例,一个用于prod,另一个用于staging。因此,我想稍微不同地配置登台实例,因为它将用于测试。禁用电子邮件,与不同的测试后端讨论数据,这类事情。
我的第一个直觉是使用.properties文件,但我似乎无法让它工作。我使用Gradle作为构建系统,因此该文件保存在src/main/webapp/WEB-INF/staging.properties
(和旁边的匹配production.properties
)中。我试图像这样访问它:
public class Config {
private static Config sInstance = null;
private Properties mProperties;
public static Config getInstance() {
if (sInstance == null) {
sInstance = new Config();
}
return sInstance;
}
private Config() {
// Select properties filename.
String filename;
if (!STAGING) { // PRODUCTION SETTINGS
filename = "/WEB-INF/production.properties";
} else { // DEBUG SETTINGS
filename = "/WEB-INF/staging.properties";
}
// Get handle to file.
InputStream stream = this.getClass().getClassLoader().getResourceAsStream(filename);
if (stream == null) {
// --> Crashes here. <--
throw new ExceptionInInitializerError("Unable to open settings file: " + filename);
}
// Parse.
mProperties = new Properties();
try {
mProperties.load(stream);
} catch (IOException e) {
throw new ExceptionInInitializerError(e);
}
}
问题是getResourceAsStream()
始终返回null
。我检查了build / explosion-app目录,并显示了.properties文件。我还检查了.war文件,并在那里找到了.properties文件。
我也尝试将文件移到/WEB-INF/classes
,但这也没有什么区别。
我在这里缺少什么?
答案 0 :(得分:0)
尝试
BufferedReader reader = new BufferedReader(new FileReader(filename));
或
InputStream stream = this.getClass().getResourceAsStream(filename);