I have this requirement that my webapp needs to read from a properties file outside the Tomcat webapps directory, for example from $CATALINA_HOME/properties/myapp.properties. I have tried several things but so far no luck
There are multiple approaches .
- Use an Environmental variable
- Use a System Property
- Set it as a Application Context Param in Web.xml
Heres a sample ,that showsOption 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();
}
I prefer the option to configure via Tomcat context descriptors.
These XML-documents are placed into the folder tomcat/conf/Catalina/<host>/*.xml
This refers to: Externalizing Tomcat webapp config from .war file
In our project that we config the path of file as vm arguments which will stored in the tomcat properties and in the code, use System.getProperty(the parameter you config)
to get the path and read the properties file, then get the results.
We have put the path of webapp-config directory as follows:
/var/lib/tomcat7/webapps/webapp/WEB-INF/classes/system-properties-location.properties
where webapp= name of your webapp file
Here are the contents of system-properties-location.properties file:
location=/var/lib/tomcat7/webapp-configs/webapp
It points to an external location to pull environment specific properties from. This way we can deploy same war in dev , staging and prod without modifying war contents.
© 2022 - 2024 — McMap. All rights reserved.