如何在Tomcat中读取我的webapp上下文之外的属性文件[重复]

Posted

技术标签:

【中文标题】如何在Tomcat中读取我的webapp上下文之外的属性文件[重复]【英文标题】:How to read a properties file outside my webapp context in Tomcat [duplicate] 【发布时间】:2013-02-25 10:45:56 【问题描述】:

我有这样的要求,我的 webapp 需要从 Tomcat webapps 目录之外的属性文件中读取,例如从 $CATALINA_HOME/properties/myapp.properties。我已经尝试了几件事,但到目前为止没有运气

【问题讨论】:

文件就是文件;给它一个路径并阅读它。 是的,这很容易做到。不是没有道理,是有原因的。 我认为该文件将被多个项目共享,我发布一个答案,希望它能给你提示。 这是配置所必需的,当我们将相同的战争部署到不同的盒子(dev、qa 等)时​​。我们使用 $TOMCAT/conf/xxx.properties 文件,并有一个不同应用程序使用的 jar(带有用于读取命名属性文件和属性本身的类)。 【参考方案1】:

有多种方法。

    使用环境变量 使用系统属性 将其设置为 Web.xml 中的应用程序上下文参数

这是一个示例,显示Option 1 and Option 2

try 

    //Use Any Environmental Variable , here i have used CATALINA_HOME
    String propertyHome = System.getenv("CATALINA_HOME");           
    if(null == propertyHome)

        //This is a system property that is  passed
        // using the -D option in the Tomcat startup script
        propertyHome  =  System.getProperty("PROPERTY_HOME");
    


    String filePath= propertyHome+"/properties/myapp.properties";

    Properties property = new Properties();         
    property.load(SystemTest.class.getClassLoader().getResourceAsStream(filePath));
 catch (IOException e) 
    // TODO Auto-generated catch block
    e.printStackTrace();

【讨论】:

谢谢!我在系统属性“catalina.home”中使用了你的第二种方法这正是我所需要的!【参考方案2】:

我更喜欢通过 Tomcat 上下文描述符进行配置的选项。

这些 XML 文档被放入文件夹 tomcat/conf/Catalina/<host>/*.xml

这里指的是:Externalizing Tomcat webapp config from .war file

【讨论】:

【参考方案3】:

在我们的项目中,我们将文件的路径配置为 vm 参数,这些参数将存储在 tomcat 属性中,在代码中,使用System.getProperty(the parameter you config) 获取路径并读取属性文件,然后获取结果。

【讨论】:

是的,但是如果 Tomcat 和我需要在类的某个地方读取文件....实现 ServletContextListener 我得到了 WAR 相关路径!是否有可能使用例如 SPRING 来获取 WAR 之外的路径?文件:d:/my/path/toFile.log【参考方案4】:

我们把webapp-config目录的路径如下:

/var/lib/tomcat7/webapps/webapp/WEB-INF/classes/system-properties-location.properties

在哪里 webapp= 您的 webapp 文件的名称

这里是 system-properties-location.properties 文件的内容:

location=/var/lib/tomcat7/webapp-configs/webapp

它指向一个外部位置以从中提取特定于环境的属性。这样我们就可以在 dev 、 staging 和 prod 中部署相同的战争,而无需修改战争内容。

【讨论】:

以上是关于如何在Tomcat中读取我的webapp上下文之外的属性文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何读取在 apache tomcat 中运行的 webapp 的清单文件?

如何获取 Grails/Tomcat Webapp 的当前工作目录?

像静态资源一样,是不是可以为放置在 webapps 之外的 JSP 提供服务

如何在 tomcat 容器中安装 servlet 并将其加载到每个 Web 应用程序的上下文中?

tomcat中如何读取properties文件

将 webapp 从 Eclipse 部署到 Tomcat 根上下文