2010-06-01 2 views
9

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

Можно ли использовать свойство из файла свойств на пути к классам в web.xml? Что-то вроде этого:

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

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

P

+2

вот решение: http://stackoverflow.com/questions/12099008/how-to-include-values-from-properties-file-into-web-xml/12099830#12099830 – lancha90

ответ

6

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

<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"); 
+1

, где должен находиться файл myprop.properties в иерархии папок проекта? – Amruta

+0

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

2

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

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

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

В вашем примере, значение вы извлекаете бы Строка classpath:mypropertyfile.properties['myproperty']

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

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

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

+2

Спасибо за ваш ответ. Однако во время запуска я хотел бы найти свойство. То есть та же война должна иметь разные свойства для разных стран. Я не уверен, что это вообще возможно. В настоящий момент я делаю почти так, как вы предлагаете, я заменяю значение во время сборки Maven. –

+0

Это информативно ... http://java.sun.com/developer/technicalArticles/xml/WebAppDev4/ – ingyhere

+0

как бы вы назвали этот контекст в вашем Java-коде? и на что указывает «classpath»? – JesseBoyd

1

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

Если вы используете 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 войны плагин

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <configuration> 
     <filteringDeploymentDescriptors>true</filteringDeploymentDescriptors> 
    </configuration> 
</plugin> 
Смежные вопросы