How to read a properties file outside my webapp context in Tomcat [duplicate]
Asked Answered
L

4

11

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

Lexicographer answered 10/3, 2013 at 3:27 Comment(4)
A file is a file; give it a path and read it.Ketosis
Yeah this is easy to do. It's not senseless, there are reasons for it.Reamy
I think the file will be shared by multiple projects, I post an answer, hope it can give you the hint.Johst
This is required for configuration, when we deploy the same war to different boxes (dev, qa, etc). We use $TOMCAT/conf/xxx.properties files, and have a jar (with classes to read the named property files and the properties themselves) that different applications use.Trimolecular
H
19

There are multiple approaches .

  1. Use an Environmental variable
  2. Use a System Property
  3. 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();
}
Harmattan answered 10/3, 2013 at 4:12 Comment(1)
Thank you! I used your second approach with System Property "catalina.home" This is exactly what I needed!Lexicographer
A
2

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

Annabellannabella answered 10/6, 2014 at 17:33 Comment(0)
J
1

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.

Johst answered 10/3, 2013 at 3:45 Comment(1)
Yeah, but in case Tomcat and if I need read file somewhere in class .... implements ServletContextListener {} I got WAR related path ! Is it possible something using for example SPRING to get path outside of WAR ? file:d:/my/path/toFile.logBriolette
C
0

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.

Cloudcapped answered 15/4, 2016 at 11:27 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.