2012-03-08 18 views
16

Używam pliku konfiguracyjnego XML, który jest ładowany do mojej aplikacji Java przy użyciu ApplicationContext.Jak używać opcjonalnego pliku właściwości w pliku konfiguracyjnym Spring?

Plik konfiguracyjny XML rozwiązuje jego właściwości, odczytując z kilku plików właściwości za pomocą PropertyPlaceholderConfigurer.

Chcę, aby każdy plik właściwości był opcjonalny. Myślałem, że odbywa się to poprzez ustawienie ignoreUnresolsvablePlaceholders true, jednak otrzymuję następujący wyjątek podczas uruchamiania aplikacji (db-default.properties istnieje, ale db.properties nie):

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 

To co moje Konfiguracja XML wygląda następująco:

<?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> 

Co należy zrobić, aby db.properties był opcjonalnym plikiem właściwości?

Odpowiedz

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

Dziękuję. To wystarczyło. –

+0

W rzeczywistości, patrząc na to, co napisałem, zdałem sobie sprawę, że oboje używamy starego stylu xml. czy znasz składnię 'p: ignoreResourceNotFound =" true "'? jeśli nie, sprawdź http://blog.springsource.org/2006/11/25/xml-syntax-sugar-in-spring-20/ –

4

To powinno działać zbyt:

<context:property-placeholder ignore-resource-not-found="true" location="classpath:your.properties" ... /> 
Powiązane problemy