Не удалось открыть ресурс ServletContext - PullRequest
33 голосов
/ 17 мая 2011

Этот вопрос очень похож на один более старый, но решение не сработало для меня.

У меня есть пакет 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>

In 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 [/social.properties]

Я проверил пакет WAR - файлы .xml и .properties находятся в /WEB-INF/classes

.properties файл находится в src/main/resources и .xml в src/main/java (в пакете по умолчанию оба) и maven переносит их (я думаю) правильно в пакете по умолчанию WEB-INF/classes

Кто-нибудь знает, почему я мог получить это исключение?Спасибо.

РЕДАКТИРОВАТЬ: я просто хочу добавить, что тесты JUnit проходят правильно (я имею в виду, что они загружают то, что они должны из social.properties), но при запуске приложения оно игнорирует мой classpath: префикс

Ответы [ 8 ]

32 голосов
/ 07 февраля 2012

Не используйте classpath. Это может вызвать проблемы с различными ClassLoaders (контейнер против приложения). 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>
13 голосов
/ 09 ноября 2011

Поместите такие вещи, как /src/main/resources/foo/bar.properties, а затем обозначьте их как classpath:/foo/bar.properties.

5 голосов
/ 25 ноября 2011

Попробуйте вместо этого использовать префикс classpath*:.

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/resources.html#resources-classpath-wildcards

Также, пожалуйста, попробуйте развернуть разнесенную войну, чтобы убедиться, что все файлы есть.

0 голосов
/ 21 марта 2019

У меня была такая же ошибка.

Мое имя файла было jpaContext.xml, и оно было помещено в src/main/resources. Я указал параметр value="classpath:/jpaContext.xml".

Наконец, я переименовал файл в applicationContext.xml, переместил его в каталог WEB-INF и изменил значение параметра на /WEB-INF/applicationContext.xml, тогда он заработал!

0 голосов
/ 25 сентября 2013

Отметьте, что файл свойств находится в "/ WEB-INF / classes", попробуйте использовать

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
        <value>/WEB-INF/classes/social.properties</value>
    </property>
</bean>
0 голосов
/ 20 октября 2011

попробуйте с этим кодом ...

 <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
         <property name="ignoreUnresolvablePlaceholders" value="true"/>
             <property name="locations">
              <list>                        
                    <value>/social.properties</value>               
              </list>
         </property>         
        </bean>
0 голосов
/ 27 мая 2011

Tomcat распаковывает файл WAR? Кажется, что файлы не могут быть найдены в пути к классам при загрузке файла WAR, и это не при распаковке.

0 голосов
/ 19 мая 2011

Я думаю, что в настоящее время файл application-context.xml находится в src / main / resources, а файл social.properties - в src / main / java ... так, когда вы пакетируете (пакет mvn) или когда запускаете tomcatmvn tomcat: run) ваши social.properties исчезли (я знаю, что вы сказали, когда вы зарегистрировались в .war, файлы здесь ... но ваше исключение говорит об обратном).

Решение состоит в том, чтобы просто поместить всеВаши файлы конфигурации (application-context.xml и social.properties) в src / main / resources, чтобы следовать стандартной структуре maven.

...