【问题标题】:Reading Property file from tomcat webapps folder从 tomcat webapps 文件夹中读取属性文件
【发布时间】:2010-09-08 07:38:23
【问题描述】:

我在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");
}

不过,我将输入流设为空。

【问题讨论】:

    标签: java tomcat


    【解决方案1】:

    getSystemResourceAsStream 方法返回 null 表示在指定位置的类路径上找不到资源。这是有道理的,因为$TOMCAT_HOME/webapps 不在类路径中。

    所以要么将该文件放在应用程序类路径上的目录中(如果你想在战争之外拥有它,那么你必须把它放在$CATALINA_HOME/lib - 所有隐含的后果)或更改您的方法(使用 JNDI 存储属性、使用绝对路径等)。

    参考文献

    【讨论】:

      【解决方案2】:

      为了通过类路径访问属性文件,我将这些文件放在“webapp/WEB-INF/classes”中。

      这样做是标准的,也是避免绝对路径问题的好方法。

      如果您的项目具有标准的 Maven 结构,则由 Maven 管理:

      • 来源在“src/main/java”中
      • 属性位于“src/main/resources”中

      Maven打包web应用时,类编译在“webapp/WEB-INF/classes”,资源复制到同一目录。

      【讨论】:

      • 我不希望我的属性文件位于战争文件中。如果我这样做,它可以工作。我的要求是我需要读取我的战争文件之外的属性文件,以便我可以在任何环境中部署相同的战争文件 - uat 、 prod 等
      • 始终使用 maven,这作为打包时间进行管理。您可以指定包配置文件(uat、prod 等)。属性文件将包含在具有良好参数的战争中。
      【解决方案3】:

      您无法通过这种方式访问​​ 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");
      

      【讨论】:

        【解决方案4】:

        需要使用包含此文件的文件夹名称更新类路径。我做到了,它奏效了。我在 Eclipse、tomcat 和独立 java 中做过

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-09-20
          • 2019-08-11
          • 2012-07-12
          • 2014-12-07
          • 1970-01-01
          • 1970-01-01
          • 2013-09-04
          • 2012-09-08
          相关资源
          最近更新 更多