8

我需要将 a 中的一些值包含file.propertiesWEB-INF/web.xml如下内容中:

<param-name>uploadDirectory</param-name>
<param-value>myFile.properties['keyForTheValue']</param-value>

我目前正在处理这个:

  • 老板
  • JEE5
4

3 回答 3

14

您可以添加此类,将文件中的所有属性添加到 JVM。并将此类添加到上下文侦听器中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));
         }
      }
   }
}  

在 web.xml 中

   <listener>       
      <listener-class>
         com.company.InitVariables
      </listener-class>
   </listener>  

现在您可以使用获取项目中的所有属性

System.getProperty(...)

或在 web.xml

<param-name>param-name</param-name>
<param-value>${param-name}</param-value>
于 2012-08-23T20:37:02.950 回答
3

关于上述接受的解决方案,请注意。

我今天在 jboss 5 上对此进行了试验:在加载contextInitialized()之后才调用该方法,web.xml因此对系统属性的更改不会及时生效。奇怪的是,这意味着如果您重新部署 webapp(不重新启动 jboss),该属性将在上次部署时设置,因此它可能看起来可以工作。

我们将使用的解决方案是通过 java 命令行将参数传递给 jboss,例如-Dparameter1=value1 -Dparameter2=value2.

于 2013-01-03T22:01:30.957 回答
0

使用 Ant 的 replacetoken 任务。https://blogs.oracle.com/rajeshthekkadath/entry/automation_using_ant_replace_function

于 2012-08-23T20:53:49.110 回答