How to include values from .properties file into web.xml?
I need to include some values from a file.properties
into the WEB-INF/web.xml
something like this:
<param-name>uploadDirectory</param-name>
<param-value>myFile.properties['keyForTheValue']</param-value>
I'm currently working with this:
- JBoss
- JEE5
Solution 1:
You can add this class, that add all properties from your file to JVM. And add this class like context-listener to web.xml
public class InitVariables implements ServletContextListener
{
@Override
public void contextDestroyed(final ServletContextEvent event)
{
}
@Override
public void contextInitialized(final ServletContextEvent event)
{
final String props = "/file.properties";
final Properties propsFromFile = new Properties();
try
{
propsFromFile.load(getClass().getResourceAsStream(props));
}
catch (final IOException e)
{
// can't get resource
}
for (String prop : propsFromFile.stringPropertyNames())
{
if (System.getProperty(prop) == null)
{
System.setProperty(prop, propsFromFile.getProperty(prop));
}
}
}
}
in web.xml
<listener>
<listener-class>
com.company.InitVariables
</listener-class>
</listener>
now you can get all properties in you project using
System.getProperty(...)
or in web.xml
<param-name>param-name</param-name>
<param-value>${param-name}</param-value>
Solution 2:
A word of caution regarding the accepted solution above.
I was experimenting with this on jboss 5 today: the contextInitialized()
method doesn't get invoked until after web.xml
is loaded so the change to System properties doesn't take effect in time. Strangely this means that if you re-deploy the webapp (without restarting jboss) the property will survive from being set the last time it was deployed, so it may appear to work.
The solution that we're going to use instead is to pass the parameters to jboss via the java command line e.g. -Dparameter1=value1 -Dparameter2=value2
.