Spring导入资源:如果文件不存在则跳过

时间:2017-01-05 05:42:51

标签: spring file import spring-bean

我将此添加到我的WAR文件中的Spring配置中:

<import resource="classpath:myapp-custom-settings.xml"/>

这样,用户可以创建myapp-custom-settings.xml文件(在shared.loader中列出的文件夹中来修改他们想要的bean而无需解压WAR。 /> 非常方便,但是大多数用户都没有这样的文件,在这种情况下会发生FileNotFoundException并且应用程序无法启动:

ERROR: org.springframework.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.parsing.BeanDefinitionParsingException:Configuration problem: Failed to import bean definitions from URL location [file:/home/nico/tomcat/conf/myapp-custom-settings.xml]
Offending resource: ServletContext resource [/WEB-INF/spring/root-context.xml]; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from URL [file:/home/nico/tomcat/conf/myapp-custom-settings.xml]; nested exception is
java.io.FileNotFoundException: /home/nico/tomcat/conf/myapp-custom-settings.xml (No such file or directory)
    at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:70)
    at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
    at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:76)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:233)

问题:有没有办法让这个导入失败呢? 我的意思是,如果文件存在则加载文件,但如果文件不存在则跳过。

1 个答案:

答案 0 :(得分:6)

诀窍是使用classpath*代替classpath。请注意*星号字符 例如:

<import resource="classpath*:myapp-custom-settings.xml"/>

即使找不到myapp-custom-settings.xml文件,该应用也会正常启动。