Использование свойств в web.xml - PullRequest
9 голосов
/ 01 июня 2010

Я хотел бы контролировать настройки в web.xml и использовать один раз для разных сред.

Можно ли использовать свойство из файла свойств в classpath в web.xml? Примерно так:

 <context-param>
  <param-name>myparam</param-name>
  <param-value>classpath:mypropertyfile.properties['myproperty']</param-value>
 </context-param>

С наилучшими пожеланиями

P

Ответы [ 3 ]

6 голосов
/ 07 мая 2011

Нет. Однако вы можете передать файл свойств и прочитать его во время выполнения.

<context-param>
    <param-name>propfile</param-name>
    <param-value>myprop.properties</param-value>
</context-param>

Тогда тривиально загрузить свойство во время выполнения, если у вас есть доступ к сервлету.

Properties properties = new Properties();
GenericServlet theServlet = ...;
String propertyFileName = theServlet.getInitParameter("propfile");
properties.load(getClass().getClassLoader().getResourceAsStream(propertyFileName));
Object myProperty = properties.get("myProperty");
2 голосов
/ 02 июня 2010

AFAIK context-param и env-entry оба содержат статические значения. Вы не получите динамическое (динамическое) значение из файла свойств. Это будет как:

<context-param>     
  <param-name>myparam</param-name>     
  <param-value>myactualpropertyvalue</param-value>     
 </context-param>

Любое изменение значения требует повторного развертывания веб-приложения.

В вашем примере полученное значение будет String classpath:mypropertyfile.properties['myproperty']

Если вы используете Glassfish, вы можете обновить его на лету из командной строки http://javahowto.blogspot.com/2010/04/glassfish-set-web-env-entry.html

Если я понимаю, что ваше требование в время сборки (т.е. разные войны для разных env) а не во время выполнения?

Вы можете заменить значения в web.xml как часть процесса сборки ant / maven.

1 голос
/ 22 июня 2017

Если вы используете разные среды, очень вероятно, что вы не будете переключаться с одного на другое во время выполнения, поэтому вам не нужно использовать файл свойств.

При использовании maven вы можете определить различные профили для своих сред и установить параметр, который вы хотите изменить в каждом профиле.

В вашем pom.xml

<profile>
    <id>env1</id>
    <properties>
        <my.param>myParamValue<my.param/>
    </properties>
</profile>

<profile>
    <id>env2</id>
    <properties>
        <my.param>myParamValue2<my.param/>
    </properties>
</profile>

В вашем web.xml

<context-param>
    <param-name>myparam</param-name>
    <param-value>${my.param}</param-value>
</context-param>

И настройте фильтрацию в дескрипторе развертывания в плагине maven war

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <configuration>
        <filteringDeploymentDescriptors>true</filteringDeploymentDescriptors>
    </configuration>
</plugin>
...