2012-03-08 22 views
16

Estoy usando un archivo de configuración XML que se carga en mi aplicación Java utilizando ApplicationContext.¿Cómo uso un archivo de propiedades opcional en un archivo de configuración de Spring?

El archivo de configuración XML resuelve sus propiedades leyendo varios archivos de propiedades utilizando PropertyPlaceholderConfigurer.

Quiero hacer que cada archivo de propiedad sea opcional. Pensé que esto se hace mediante el establecimiento de ignoreUnresolsvablePlaceholders a cierto, sin embargo estoy recibiendo la siguiente excepción al ejecutar la aplicación (db-default.properties existe pero db.properties no lo hace):

Exception in thread "main" org.springframework.beans.factory.BeanInitializationException: Could not load properties; nested exception is java.io.FileNotFoundException: class path resource [db.properties] cannot be opened because it does not exist 

Esto es lo que mi La configuración XML se ve así:

<?xml version="1.0" encoding="UTF-8"?> 

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

    <bean id="placeholder-configurer-1" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="order" value="1"/> 
     <property name="ignoreUnresolvablePlaceholders" value="true"/> 
    </bean> 

    <bean id="placeholder-configurer-2" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="order" value="2"/> 
     <property name="ignoreUnresolvablePlaceholders" value="true"/> 
     <property name="location" value="classpath:/db-default.properties"/> 
    </bean> 

    <bean id="placeholder-configurer-3" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="order" value="3"/> 
     <property name="ignoreUnresolvablePlaceholders" value="true"/> 
     <property name="locations"> 
      <list> 
       <value>classpath:/db.properties</value> 
      </list> 
     </property> 
    </bean> 

    <bean id="MyDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
     <property name="driverClassName" value="${jdbc.driver}"/> 
     <property name="url" value="${jdbc.url}"/> 
     <property name="username" value="${jdbc.username}"/> 
     <property name="password" value="${jdbc.password}"/> 
    </bean> 

</beans> 

¿Qué debo hacer para que db.properties sea un archivo de propiedades opcional?

Respuesta

17
<property name="ignoreResourceNotFound" value="true"/> 
+0

Gracias. Eso hizo el truco. –

+0

en realidad, mirando lo que escribí, me di cuenta de que ambos estamos usando el antiguo estilo xml. ¿conoce la sintaxis 'p: ignorarResourceNotFound =" true "'? si no, echa un vistazo a http://blog.springsource.org/2006/11/25/xml-syntax-sugar-in-spring-20/ –

4

Esto debería funcionar también:

<context:property-placeholder ignore-resource-not-found="true" location="classpath:your.properties" ... /> 
Cuestiones relacionadas