2012-09-12 32 views
7

necesito leer una variable de entorno definida en mi web.xmlLeer una variable de entorno de applicationContext.xml

<env-entry> 
    <description>Path Repositorio NFS</description> 
    <env-entry-name>PATH_ENV</env-entry-name> 
    <env-entry-type>java.lang.String</env-entry-type> 
    <env-entry-value>C:/V3</env-entry-value> 
</env-entry> 

de mi applicationContext.xml

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="location" value="${PATH_ENV}/myprop.properties" /> 
</bean> 

¿Cómo puedo hacer esto?


fin he hecho lo siguiente:

1 Definir variable de entorno en context.xml:

<Environment name="PATH_ENV" type="java.lang.String"/> 

2 Definir env-entry en web.xml

<env-entry> 
    <description>Path Repositorio NFS</description> 
    <env-entry-name>PATH_ENV</env-entry-name> 
    <env-entry-type>java.lang.String</env-entry-type> 
    <env-entry-value>/WEB-INF/</env-entry-value> 
    </env-entry> 

3 Definir en applicationContext.xml

<bean id="configurationPath" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName"> 
     <value>java:comp/env/PATH_ENV</value> 
    </property> 
</bean> 

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="location"> 
      <bean factory-bean="configurationPath" factory-method="concat"> 
       <constructor-arg value="myprop.properties"/> 
      </bean> 
     </property> 
    </bean> 

Esto se ejecuta correctamente, sin embargo si definir una ruta completa en:

<env-entry-value>C:/V3/</env-entry-value> 

tengo el siguiente problema:

java.io.FileNotFoundException: Could not open ServletContext resource [/C:/V3/aesantasa.properties] 

I Cant definir una ruta completa en env-interés social valor ¿Por qué?

+0

En caso de que alguien responda a esta pregunta, debería haber sido el archivo ': C:/V3/' – Jamie

Respuesta

0

Puede usar context-param, eso funcionará.

<context-param> 
    <param-name>PATH_ENV</param-name> 
    <param-value>C:/V3</param-value> 
</context-param> 
4

Usted puede buscar entradas JNDI (tanto las entradas de Medio Ambiente y Recursos) con el JndiObjectFactoryBean o <jee:jndi-lookup>:

<jee:jndi-lookup id="PATH_ENV" jndi-name="PATH_ENV"/> 

(Para utilizar el Jee-espacio de nombres, debe declare él).

Define un bean de resorte denominado "PATH_ENV" que contiene (como una cadena) la ruta configurada en la entrada del entorno. Ahora puede inyectarlo en otros beans:

<bean class="xy.Foo"> 
    <property name="path" ref="PATH_ENV"/> 
</bean> 

La dificultad restante es concatenar las cadenas. (Por desgracia, no hay JndiPlaceholderConfigurer que reemplace los marcadores de posición con entradas de entorno JNDI, por lo que no puede utilizar la sintaxis ${property}/foo para concatenar, y debe suministrar otra definición de frijol:

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location"> 
     <bean factory-bean="PATH_ENV" factory-method="concat"> 
      <constructor-arg>/myprop.properties</constructor-arg> 
     </bean> 
    </property> 
</bean> 

(código no probado como I don' t tiene un proyecto de primavera en la mano para probarlo)

+0

No puedo leer el contexto-par ¿Es esta la forma correcta de leer el parámetro de contexto en applicationContext.xml? value = "$ {} PATH_ENV /myprop.properties" – Geme

+0

Un contexto parámetro no es lo mismo que una entrada de entorno. Su pregunta dice entrada de entorno (''), entonces ¿por qué ahora está hablando de los parámetros de contexto ('')? En cuanto a cómo referirse a él, editaré para incluir una muestra. – meriton

+0

org.springframework.beans.factory.BeanCreationException: error al crear bean con el nombre 'PATH_ENV': la invocación del método init falló; la excepción anidada es javax.naming.NameNotFoundException: El nombre PATH_ENV no está asociado a este contexto – Geme

0

por qué no sólo tiene que utilizar el siguiente?

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location" value="file:C:/V3/myprop.properties"/> 
</bean> 
+0

los archivos de propiedades deben tener una ruta relativa basada en la misma variable – Geme

+0

¿por qué no pone archivos .properties en recursos o la carpeta similar en su proyecto que está en classpath? –

-1

he resuelto algo, creo que, de forma similar.

que crear una variable de sistema de Windows con la parte variable de la ruta:

my computer --> advanced options --> environment options --> Systeme Variable 

Y luego, con este ultimo la ruta en primavera AppContext así:

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 

    <property name="locations"> 
     <list> 
       <value>file:${PARENT_PATH}/conf/dev/jdbc.properties</value> 
     <list>   
    </property> 
</bean> 

no lo hago saber si realmente ayuda, pero para mí funciona

+0

Mi problema es que la variable no puede ser una variable del sistema – Geme

Cuestiones relacionadas