How to include values from .properties file into w

2019-01-08 18:08发布

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

3条回答
仙女界的扛把子
2楼-- · 2019-01-08 18:20

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>
查看更多
smile是对你的礼貌
3楼-- · 2019-01-08 18:27

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.

查看更多
登录 后发表回答