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

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

有多种方法。

  1. 使用环境变量
  2. 使用系统属性
  3. 在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(); } 

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

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

这些XML文档放在tomcat/conf/Catalina//*.xml文件夹中

这涉及: 从.war文件外部化Tomcat webapp配置

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

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

其中webapp =您的webapp文件的名称

以下是system-properties-location.properties文件的内容:

位置=的/ var / lib中/ tomcat7 / web应用-CONFIGS / web应用

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