如何在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 提供服务