2015-10-18 54 views
0

最近我決定和Spring一起玩。我做了一些教程,一切似乎都很好,直到我嘗試使用多個屬性文件。正如互聯網所說,這足以做類似豆名不斷的錯誤

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="ignoreUnresolvablePlaceholders" value="true"/> 
     <property name="ignoreResourceNotFound" value="true"/> 
     <property name="location"> 
      <list> 
       <value>classpath:readData.properties</value> 
       <value>classpath:sendMail.properties</value> 
      </list> 
     </property> 
</bean> 

呃,不幸的是它不起作用。令人驚訝的這個版本的作品(對於一個屬性的文件夾):

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

控制檯表示如下:

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0' defined in class path resource [Beans.xml]: Initialization of bean failed; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert property value of type 'java.util.ArrayList' to required type 'org.springframework.core.io.Resource' for property 'location'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [java.util.ArrayList] to required type [org.springframework.core.io.Resource] for property 'location': PropertyEditor [org.springframework.core.io.ResourceEditor] returned inappropriate value of type [java.util.ArrayList] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:529) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) 
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:657) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:461) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
    at corrected_reminder.Reminder.main(Reminder.java:25) 
Caused by: org.springframework.beans.TypeMismatchException: Failed to convert property value of type 'java.util.ArrayList' to required type 'org.springframework.core.io.Resource' for property 'location'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [java.util.ArrayList] to required type [org.springframework.core.io.Resource] for property 'location': PropertyEditor [org.springframework.core.io.ResourceEditor] returned inappropriate value of type [java.util.ArrayList] 
    at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:468) 
    at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:494) 
    at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:488) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1433) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1392) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1128) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    ... 10 more 
Caused by: java.lang.IllegalArgumentException: Cannot convert value of type [java.util.ArrayList] to required type [org.springframework.core.io.Resource] for property 'location': PropertyEditor [org.springframework.core.io.ResourceEditor] returned inappropriate value of type [java.util.ArrayList] 
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:260) 
    at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:448) 
    ... 16 more 

誰能幫助我?

編輯

@Denis Makarskiy 我已經嘗試過很多次,但沒有令人滿意的結果。現在我有

Exception in thread "main" org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Cannot locate BeanDefinitionDecorator for element [property-placeholder] 
Offending resource: class path resource [Beans.xml] 

回答

0

您可以使用context:property-placeholder標記指定多個屬性文件。

例子:

<context:property-placeholder location="readData.properties, 
              sendMail.properties"/> 

不要忘記架構添加上下文豆的標籤,就像這樣:

<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.1.xsd 
         http://www.springframework.org/schema/context 
         http://www.springframework.org/schema/context/spring-context-3.1.xsd> 
相關問題