Подтвердить что ты не робот

Не удалось открыть ресурс 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:

4b9b3361

Ответ 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.

Ответ 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>