如何在AppEngine应用程序中访问.properties文件?

时间:2015-04-24 02:41:24

标签: java google-app-engine

我有一个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,但这也没有什么区别。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

尝试

BufferedReader reader = new BufferedReader(new FileReader(filename));

InputStream stream = this.getClass().getResourceAsStream(filename);