2011-11-25 27 views
23

Tengo una aplicación Spring y está funcionando bien hasta el momento. Ahora quiero que el archivo de propiedades en una carpeta de configuración externa y no en el contenedor empaquetado cambie las cosas sin la necesidad de reempaquetar. Esto es lo que tengo:¿Propiedades externas del contexto de la aplicación de primavera?

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
<!-- <property name="locations" value="classpath:/springcontext.properties"/> --> 
<property name="locations" value ="config/springcontext.properties" /> 

El outcommented está trabajando y el otro yo no ir a trabajar:/¿Alguien puede ayudar?

Editar: Thx 4 comentarios hasta ahora.

Tal vez mi pregunta no era lo suficientemente clara :). Realizo una compilación de Maven y todo estará empaquetado y quiero que esta carpeta NO esté en la tuerca del paquete al lado del frasco de salida y en esta carpeta quiero el archivo de propiedades. ¿posible?

+0

Pruebe con un singular 'location', aunque' locations' Deberia trabajar. También intente eliminar el '/' inicial de la referencia de ruta de clase. –

+0

¿Alguien puede ayudar con la nueva pregunta? –

+0

@DennisIch ¿Cómo terminaste arreglando esto? Estoy frente a una pregunta similar – happybuddha

Respuesta

11
<context:property-placeholder location="classpath*:spring/*.properties" /> 

Si lo coloca en algún lugar de la ruta de clase en un resorte directorio llamado (nombres cambian/directorios en consecuencia), se puede acceder con más arriba

<property name="locations" value ="config/springcontext.properties" /> 

este estará apuntando a WEB-INF/classes /config/springcontext.properties

+0

no es una aplicación web es independiente con alguna funcionalidad de línea de comandos y para eso la necesito fuera del contenedor. –

+0

Bueno, entonces está justo al lado de su archivo jar si no es un proyecto web – fmucar

2

Una forma de hacerlo es agregar su carpeta de configuración externa al classpath del proceso java. Así es como lo he hecho a menudo en el pasado.

+0

Parece que '' property-placeholder'' de Spring no es capaz de cargar archivos de propiedades fuera del paquete donde se define el contexto de la aplicación (ver http://forum.springsource.org/showthread.php?87994- Classpath_-in- context-property-placeholder-doesnt-pick-system-classpath & p = 295698 # post295698). ¿Cómo logró cargar archivos de propiedades externos? –

+0

¿Has intentado agregarlo al archivo de manifiesto? – pap

+1

Umm ... ¿qué se agrega en el archivo manifiesto? El archivo 'MANIFEST.MF' reside dentro de un paquete, entonces, ¿cómo podría ayudar? –

11

puede usar prefijo de archivo para cargar el archivo de contexto de aplicación externa alguna cosa como esta

<context:property-placeholder location="file:///C:/Applications/external/external.properties"/> 
+0

También funciona como propiedad 'location' de' PropertyPlaceholderConfigurer' –

43

Usted puede intentar algo como esto:

<context:property-placeholder 
     location="${ext.properties.dir:classpath:}/servlet.properties" /> 

y definir ext.properties.dir propiedad en su aplicación de servidor/JVM, de lo contrario la ubicación propiedades predeterminadas "ruta de clases: /" (es decir, las clases de dir .jar o .war) sería ser utilizado:

-Dext.properties.dir=file:/usr/local/etc/ 

BTW, muy útil blog post.

9

This blog puede ayudarlo. El truco es usar SpEL (lenguaje de expresión de primavera) para leer las propiedades del sistema como user.home, para leer el directorio de inicio del usuario usando SpEL, puede usar la expresión
#{ systemProperties['user.home']} dentro de los elementos de su bean. Por ejemplo, para acceder a su archivo de propiedades almacenado en su directorio personal, podría usar lo siguiente en su PropertyPlaceholderConfigurer, funcionó para mí.

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations"> 
     <value>file:#{ systemProperties['user.home']}/ur_folder/settings.properties</value> 
    </property> 
</bean> 
5

Esta pregunta es un poco antigua, pero quería compartir algo que funcionó para mí. Espero que sea útil para las personas que están buscando información para acceder a las propiedades en una ubicación externa.

Esto es lo que funcionó para mí.

  1. contenido del archivo Propiedad:

    PROVIDER_URL=t3://localhost:8003,localhost:8004 
    
  2. applicationContext.xml contenido del archivo: (Spring 3.2.3)

    Nota: ${user.home} es una propiedad del sistema del sistema operativo.

    <context:property-placeholder system-properties-mode="OVERRIDE" location="file:${user.home}/myapp/latest/bin/my-env.properties"/> 
    
    <bean id="appsclusterJndiTemplate" class="org.springframework.jndi.JndiTemplate"> 
        <property name="environment"> 
         <props> 
          <prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop> 
          <prop key="java.naming.provider.url">${PROVIDER_URL}</prop> 
         </props> 
        </property> 
    </bean> 
    

${PROVIDER_URL} obtuve sustituye por el valor de las propiedades del archivo

1
<context:property-placeholder location="file:/apps/tomcat/ath/ath_conf/pcr.application.properties" /> 

Esto funciona para mí. trayectoria de la máquina El desarrollo local es C: \ apps \ Tomcat \ ath \ ath_conf y en el servidor/apps/tomcat/ath/ath_conf

Ambos trabajos para mí

Cuestiones relacionadas