这个问题和一个老问题很相似,但解决方法对我不起作用。
我有一个WAR包。
在 web.xml
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
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
.properties
src/main/resources
.xml中src/main/java
WEB-INF/classes
有谁知道我为什么能得到这个例外?谢谢。
编辑:我只是想补充一下JUnit测试能够正常进行(我的意思是他们加载了他们应该从那里来的东西social.properties),但是在运行应用程序时,它会忽略我的classpath:前缀
social.properties
classpath:
不要使用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>