2010-08-31 21 views
10

Estoy moviendo propiedades desde el archivo de configuración Spring a un archivo de propiedades independiente. Esto está incluido en el archivo de configuración conReferencia Archivo de propiedades de Spring utilizando la ruta relativa al archivo de configuración

<bean class="org.springframework.beans.factory.config.PropertyPlaceHolderConfigurer"> 
    <property name="location" value="file:properties/${CONFIG_MODE}/service.properties" /> 
</bean> 

En su forma actual, la ubicación del archivo de propiedades es relativa al directorio de trabajo actual del proceso del servidor.

Esto crea el requisito de que el proceso debe iniciarse desde un directorio de trabajo específico, y lo que es peor permite la posibilidad (remotamente admitida) de que pueda recoger un archivo de propiedades completamente diferente; por ejemplo, si se inició con el directorio de trabajo configurado en una versión anterior del servicio.

Me gustaría hacer referencia al archivo de propiedades usando una ruta que es relativa al directorio que contiene el archivo de configuración.

En cuanto a FileSystemResource, parece que createRelative podría ser lo que necesito, pero no puedo encontrar la forma de usarlo en el archivo de configuración.

Gracias,

Steve

Respuesta

10

que no sé de una manera de hacer eso.

Lo que puede hacer, sin embargo, es cargar el archivo de propiedades de la ruta de clases:

<bean class="org.springframework.beans.factory.config.PropertyPlaceHolderConfigurer"> 
    <property name="location" value="classpath:path/to/service.properties" /> 
</bean> 

La ubicación ruta de clases de su archivo de propiedades es una situación mucho más predecible, y que va a trabajar el tiempo que su classpath está configurado correctamente.

+0

Buena solución, gracias. El único problema (y admito que esto no es un problema grave) es que a veces es útil poder ver/editar el archivo de propiedades directamente, por ejemplo, en una situación de emergencia o hacer algunas pruebas rápidas. Tenerlo dentro del frasco no evita esto, pero lo hace un poco engorroso. – stevec

+2

@stevec: No tiene que estar dentro de un archivo JAR, puede fácilmente estar dentro de un directorio del sistema de archivos que está en el classpath. – skaffman

+0

Funcionará esto una vez que use '@Value (" $ {thing.inside.service.properties} ")'? –

9

Usando 3.1, puede mantener los archivos fuera de la ruta de clase si lo desea.

con la siguiente definición de frijol,

<bean class= 
    "org.springframework.beans.factory.config.PropertyPlaceHolderConfigurer"> 
    <property name="location" 
    value="file:${props.path}/service.properties" /> 
</bean> 

se puede establecer un establecimiento a través de la línea de comandos java

java ... -Dprops.path=path/to/where/it/is 
0

Suponiendo que haya colocado los config.properties archivo dentro de WEB-INF continuación:

<bean id="propertyConfigurerInternal" 
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
<property name="location"> 
    <value>classpath:../config.properties</value> 
</property> 

Cuestiones relacionadas