无法打开 ServletContext 资源

2022-09-01 04:30:54

这与一个较旧的问题非常相似,但解决方案对我不起作用。

我有一个 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: 無法賣入資料;嵌套异常是 java.io.FileNotFoundException: 无法打开 ServletContext resource [/social.properties]

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

.properties文件在和在(在默认包中两者)和maven在默认包中正确传输它们(我认为)src/main/resources.xmlsrc/main/javaWEB-INF/classes

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

编辑:我只想补充一点,JUnit测试正确运行(我的意思是它们加载它们应该从中加载的内容),但是当运行应用程序时,它会忽略我的前缀social.propertiesclasspath:


答案 1

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

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

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

答案 2

把类似的东西,然后引用它们作为./src/main/resources/foo/bar.propertiesclasspath:/foo/bar.properties


推荐