Не удалось открыть ресурс ServletContext
Это довольно схожий вопрос с одним старше, но решение не сработало для меня.
У меня есть пакет 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: не удалось загрузить свойства; inested exception is java.io.FileNotFoundException: Не удалось открыть ресурс ServletContext [/social.properties]
Я проверил пакет WAR - .xml
и .properties
файлы находятся в /WEB-INF/classes
.properties
файл находится в src/main/resources
и .xml
в src/main/java
(в пакете по умолчанию оба), и maven передает их (я думаю) правильно в пакет по умолчанию WEB-INF/classes
Кто-нибудь знает, почему я могу получить это исключение? Спасибо.
EDIT: Я просто хочу добавить, что тесты JUnit идут правильно (я имею в виду, что они загружают то, что они должны от social.properties
), но при запуске приложения он игнорирует префикс classpath:
Ответы
Ответ 1
Не используйте 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>
Ответ 2
Поместите вещи как /src/main/resources/foo/bar.properties
, а затем укажите их как classpath:/foo/bar.properties
.
Ответ 3
Попробуйте вместо этого использовать префикс classpath*:
.
http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/resources.html#resources-classpath-wildcards
Также попробуйте развернуть взорванную войну, чтобы убедиться, что все файлы там.
Ответ 4
Я думаю, что в настоящее время файл application-context.xml находится в src/main/resources И файл social.properties находится в src/main/java... поэтому, когда вы пакет (пакет mvn) или когда вы запускаете tomcat ( mvn tomcat: run) исчезли ваши social.properties(я знаю, что вы сказали, когда вы зарегистрировались в .war, файлы здесь... но ваше исключение говорит об обратном).
Решение состоит в том, чтобы поместить все ваши файлы конфигурации (application-context.xml и social.properties) в src/main/resources, чтобы следовать стандартной структуре maven.
Ответ 5
У вас есть Tomcat распаковать WAR файл? Похоже, что файлы не могут быть найдены в пути к классам при загрузке WAR файла и распаковке не.
Ответ 6
попробуйте с этим кодом...
<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>
Ответ 7
Отметьте, что файл свойств находится в "/WEB-INF/classes", попробуйте использовать
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>/WEB-INF/classes/social.properties</value>
</property>
</bean>