2012-05-10 19 views
15

Solíamos tener una manera de cargar las propiedades de un archivo en la ruta de clase:Cómo utilizar la propiedad-marcador de posición para el archivo de sistema de archivos

<context:property-placeholder location="classpath:myConfigFile.properties" /> 

y funcionó muy bien. Pero ahora queremos cargar propiedades de un archivo específico en el sistema que NO está en el classpath. Queríamos poder cargar dinámicamente el archivo, por lo que estamos usando una variable de entorno Java para rellenarlo. Voy a dar un ejemplo sencillo a continuación:

En Java:

System.setProperty("my.prop.file", "/path/to/myConfigFile.properties"); 

En primavera XML:

<context:property-placeholder location="${my.prop.file}" /> 

También he intentado de esta manera, gracias a una idea de Luciano:

<context:property-placeholder properties-ref="prop" /> 

<util:properties id="prop" location="reso"/> 

<bean id="reso" class="org.springframework.core.io.FileSystemResource"> 
    <constructor-arg index="0" value="${my.prop.file}" /> 
</bean> 

Todo lo que he probado ha fallado. No importa a qué establezca my.prop.file. Grandes éxitos incluyen:

<context:property-placeholder location="/path/to/myConfigFile.properties" /> 
(ClassNotFoundException: .path.to.myConfigFile.properties) 

<context:property-placeholder location="file:/path/to/myConfigFile.properties" /> 
(ClassNotFoundException: file:.path.to.myConfigFile.properties) 

<context:property-placeholder location="file:///path/to/myConfigFile.properties" /> 
(ClassNotFoundException: file:...path.to.myConfigFile.properties) 

¿Cómo se utiliza la propiedad marcadores de posición con una ubicación que está en el sistema de archivos y no en la ruta de clase? Estamos usando Spring 3.0.5.

Resulta que hubo un problema con la secuencia de comandos que ejecuta el programa Java que carga el archivo de primavera. Gracias por ayudar. Voy a solicitar que se elimine esta pregunta, ya que el código original funciona después de todo. Gracias por su ayuda.

+13

Por cierto Muy en desacuerdo w/esta siendo cerrada –

+1

No estoy de acuerdo con el cierre también. Vine aquí después de buscar en Google y se describe la pregunta exacta que tengo ... –

+1

Yo también - No entiendo por qué esto se cerró con una categoría "demasiado localizada" Parece bastante general para mí? – monojohnny

Respuesta

4

¿Qué tal esta manera?

<context:property-placeholder properties-ref="prop" /> 

<util:properties id="prop" location="reso"/> 

<bean id="reso" class="org.springframework.core.io.FileSystemResource"> 
    <constructor-arg index="0" value="/yourpathandfile" /> 
</bean> 
+0

¿Puedo poner en el ¿Variable de entorno Java para el valor = "/ yourpathandfile"? Lo intentaré. Gracias –

+0

Esto no parece funcionar. La propiedad se está transfiriendo, pero ocurren los mismos errores. Gracias por tu ayuda, sin embargo. ¿No es esto posible? –

+0

¿Qué pasa si codificas $ {my.prop.file} con la ruta real solo para ver si funciona? – Luciano

14

Esto funcionó para mí:

<context:property-placeholder location="file:/path/to/myConfigFile.properties" /> 

Pero esto (curiosamente) no lo hizo:

<context:property-placeholder location="#{ systemProperties['foo'] }" /> 

llegué

java.io.FileNotFoundException: Could not open ServletContext resource [/#{ systemProperties['foo'] }] 

No vas a ser capaz de utilizar un marcador de posición de propiedad ${..} con th e definición de PropertyPlaceholderConfigurer. Es el pollo antes del huevo.

Siempre se puede subclase PropertyPlaceholderConfigurer y hacer que haga lo que quiera (por ejemplo, llamar a setLocations() en un método @PostConstruct Entonces, en lugar de utilizar <context:property-placeholder>, utilice:.

<bean class="com.foo.MyPropertyPlaceholderConfigurer"/> 
+0

Pensé que el lenguaje de expresión permitía eso, como se argumenta en [este artículo sobre la administración de archivos de propiedades con spring] (http: //www.summa -tech.com/blog/2009/04/20/6-tips-for-managing-property-files-with-spring/). Trataré de entender qué debe subclasificarse en PropertyPlaceholderConfigurer para que pueda descubrir cómo cargar dinámicamente un archivo de propiedades. Parecía una idea tan simple y parece tan complicada ahora con Spring. –

Cuestiones relacionadas