2010-06-01 15 views
9

Me gustaría controlar la configuración en web.xml y usar una vez diferente para diferentes entornos.Usar propiedades en web.xml

¿Es posible utilizar una propiedad, desde un archivo de propiedades en classpath, en web.xml? Algo como esto:

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

Saludos

P

+2

aquí está la solución: http://stackoverflow.com/questions/12099008/how-to-include-values-from-properties-file-into-web-xml/12099830#12099830 – lancha90

Respuesta

6

No. Sin embargo, puede pasar el archivo de propiedades y leer de él en tiempo de ejecución.

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

Es trivial cargar la propiedad en tiempo de ejecución si tiene acceso al servlet.

Properties properties = new Properties(); 
GenericServlet theServlet = ...; 
String propertyFileName = theServlet.getInitParameter("propfile"); 
properties.load(getClass().getClassLoader().getResourceAsStream(propertyFileName)); 
Object myProperty = properties.get("myProperty"); 
+1

¿dónde debería estar mi archivo myprop.properties en la jerarquía de carpetas del proyecto? – Amruta

+0

No es trivial si está intentando configurar un componente de terceros cuyo diseño no controle. –

2

yo sepa context-param y env-entry ambos tienen valores estáticos. No obtendrá el valor de tiempo de ejecución (dinámico) del archivo de propiedades. Será como:

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

Cualquier cambio en el valor necesita una redistribución de la aplicación web.

En el ejemplo, el valor se recupera sería la cadena classpath:mypropertyfile.properties['myproperty']

Si utiliza Glassfish puede actualizar sobre la marcha de la línea de comandos http://javahowto.blogspot.com/2010/04/glassfish-set-web-env-entry.html

Si entiendo su requerimiento es en tiempo de construcción (es decir, diferente guerra para diferentes env) y no durante el tiempo de ejecución?

Puede reemplazar los valores en web.xml como parte del proceso de compilación ant/maven.

+2

Gracias por su respuesta. Sin embargo, es en el momento del inicio que me gustaría buscar la propiedad. Es decir. la misma guerra debería tener diferentes propiedades para diferentes env. No estoy seguro de si es posible hacer esto. Por el momento estoy haciendo casi lo que sugiere, estoy reemplazando el valor durante una compilación Maven. –

+0

Esto es informativo ... http://java.sun.com/developer/technicalArticles/xml/WebAppDev4/ – ingyhere

+0

¿cómo llamarías ese contexto en tu código de Java? y donde te indica? classpath? – JesseBoyd

1

Si el uso de diferentes entornos Es muy probable que usted no será el cambio de uno a otro en tiempo de ejecución, por lo tanto no tener que utilizar un archivo de propiedades.

Si utiliza maven, puede definir diferentes perfiles para sus entornos y establecer el parámetro que desea cambiar en cada perfil.

En su 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> 

En su web.xml

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

Y configurar el filtrado en su descriptor de despliegue en el plugin de guerra experto

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