Конфигурация Spring не найдена

У меня есть следующее в моем web.xml:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext-*.xml</param-value>
</context-param>

У меня есть 2 файла:

  • applicationContext-web.xml в WEB-INF рядом с web.xml
  • applicationContext-service.xml в myapp-service.jar

При развертывании приложения я получаю

Для зависимости не найден соответствующий bean-компонент типа [AServiceBean]: ожидается по крайней мере 1 bean-компонент, который квалифицируется как кандидат автоподключения для этой зависимости.

Похоже, что applicationContext-service.xml не найден. Если я скопирую его рядом с web.xml, он будет работать нормально. Я не могу понять, почему это происходит.

Сервер - Tomcat 6.

Любая помощь приветствуется. Спасибо.

ИЗМЕНИТЬ

Для уточнения: если я использую

<param-value>
    classpath:applicationContext-web.xml,
    classpath:applicationContext-service.xml
</param-value>

приложение развертывается без каких-либо проблем, поэтому нужно просто найти (или не найти) applicationContext-service.xml


person ccc    schedule 06.12.2011    source источник
comment
Вы настроили component-scan?   -  person stacker    schedule 06.12.2011


Ответы (2)


Вам нужно поместить файлы конфигурации в путь к классам.

WEB-INF/classess  is the directory you need to place your configuration files
classpath:applicationContext-*.xml will then work

или что-то подобное, чтобы держать их в одном месте

WEB-INF/classes/spring   
classpath:spring/applicationContext-*.xml

applicationContext-service.xml: вам не нужно копировать этот файл, если он уже находится в файле jar.


Образец main-config.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/aop 
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/jee 
http://www.springframework.org/schema/jee/spring-jee-3.0.xsd         
http://www.springframework.org/schema/tx 
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">


<import resource="classpath:spring/config1.xml" />
<import resource="classpath:spring/config2.xml" />
.
.
<import resource="classpath:spring/configN.xml" />


</beans>
person fmucar    schedule 06.12.2011
comment
Вы не уследили за моим вопросом. Файлы конфигурации находятся в пути к классам. И тот, который не найден, это именно сервисный, который находится в JAR. - person ccc; 06.12.2011
comment
да, мой плохой. Где находится служба xml в вашем файле jar? это в корне банки или в каком-то каталоге? - person fmucar; 06.12.2011
comment
Он находится в корне JAR. Я видел в документах Spring, что могут быть проблемы с подстановочными знаками. В конце концов мне, вероятно, придется придерживаться списка имен файлов контекста вместо использования подстановочных знаков, тем более что это приложение должно работать на многих серверах и версиях. - person ccc; 06.12.2011
comment
Вы можете импортировать все файлы конфигурации в один и передать его в файле web.xml. - person fmucar; 06.12.2011
comment
см. выше, я обновил образец файла, импортирующего другие файлы конфигурации. - person fmucar; 06.12.2011

Попробуйте использовать classpath*:applicationContext-*.xml (звездочка перед двоеточием).

Однако это может не сработать, например. У JBoss есть проблемы, чтобы заставить его работать, вам нужно использовать какой-то специальный загрузчик классов от jboss.

Кроме того, есть некоторые проблемы с использованием шаблонов в корне.

В любом случае, я бы рекомендовал избегать шаблонов, лучше сделать applicationContext.xml с двумя явными операторами import.

person kan    schedule 06.12.2011
comment
Неа. путь к классам*... не работает. Пробовал и на Tomcat 7. Неудачно. - person ccc; 06.12.2011
comment
Спасибо. Я тоже пришел к такому выводу (избегая подстановочных знаков). Я рассмотрю идею импорта - никогда раньше не использовал ее, может быть, пришло время попробовать. - person ccc; 06.12.2011