一尘不染

无法打开ServletContext资源

spring

这个问题和一个老问题很相似,但解决方法对我不起作用。

我有一个WAR包。

web.xml

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:application-context.xml</param-value>
</context-param>

<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>

application-context.xml

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

但是得到这个:

org.springframework.beans.factory.BeanInitializationException: Could not load properties; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/social.properties]

我查了WAR包- .xml和.properties文件都在/WEB-INF/classes

.properties文件是在src/main/resources.xml中src/main/java(默认包两者)和Maven传输他们(我认为)在正确的默认包WEB-INF/classes

有谁知道我为什么能得到这个例外?谢谢。

编辑:我只是想补充一下JUnit测试能够正常进行(我的意思是他们加载了他们应该从那里来的东西social.properties),但是在运行应用程序时,它会忽略我的classpath:前缀


阅读 477

收藏
2020-04-20

共1个答案

一尘不染

不要使用classpath。这可能会导致使用不同的ClassLoader(容器与应用程序)出现问题。WEB-INF始终是更好的选择。

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring-config.xml</param-value>
</context-param>

and

<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
     <property name="location">
         <value>/WEB-INF/social.properties</value>
     </property>
</bean>
2020-04-20