Я новичок в Spring и унаследовал проект Spring, который имел всю конфигурацию XML в ProjectName / WebContent / WEB-INF / applicationContext.xml.Я пытаюсь разбить конфигурацию на разные компоненты, чтобы при тестировании было проще заменить такие вещи, как DataSources и Hibernate.
Вот моя файловая структура:
ProjectName
->WebContent
->WEB-INF
->applicationContext.xml
->spring-datasource.xml
->spring-hibernate-properties.xml
->spring-persistence.xml
->test
->us.mn.k12... (Java pkgs with JUnit tests)
->spring-hsqldb-datasource.xml
->spring-test-bean-locations.xml
->spring-test-hibernate-properties.xml
->src
->us.mn.k12... (Java pkgs with production code)
В WEB-INF / applicationContext.xml я импортирую следующее:
<import resource="spring-datasource.xml"/> <!-- Production datasource -->
<import resource="spring-hibernate-properties.xml"/> <!-- Production hibernate properties -->
<import resource="spring-persistence.xml"/> <!-- DAO's, hibernate .hbm.xml mapping files -->
Приложение работает с вышеуказаннымконфигурации.
Мои тесты JUnit выполняются с использованием DbUnit и базы данных HSQLDB в памяти.Так что мой тест JUnit ссылается на spring-test-bean-location.xml, который имеет следующее:
<import resource="spring-hsqldb-datasource.xml"/> <!-- HSQLDB datasource for test -->
<import resource="../WebContent/WEB-INF/spring-persistence.xml"/> <!-- Production DAO's, hibernate .hbm.xml mapping files -->
<import resource="spring-test-hibernate-properties.xml"/> <!-- Hibernate properties for test -->
Таким образом, я могу указать свойства источника данных теста и свойства гибернации, но повторно использовать файл производственного отображения дляDAO и т. Д. Однако при выполнении теста JUnit я получаю сообщение об ошибке.Вот соответствующая часть исключения:
Caused by: org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Failed to import bean definitions from relative location [../WebContent/WEB-INF/spring-persistence.xml]
Offending resource: class path resource [spring-test-bean-locations.xml]; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [../WebContent/WEB-INF/spring-persistence.xml]; nested exception is java.io.FileNotFoundException: class path resource [../WebContent/WEB-INF/spring-persistence.xml] cannot be opened because it does not exist
Теперь, если я переместлю spring-persistence.xml в / test, чтобы мне не приходилось использовать относительный путь, и на него указывалось <import resource="spring-persistence.xml"/>
, тогда тесты запускаются нормально.Поэтому я думаю, что содержимое моих файлов XML в порядке, но я не импортирую должным образом с относительным путем.
Есть ли что-то очевидное, что я делаю неправильно с моим импортом относительного пути?И, возможно, главный вопрос в том, выглядит ли это разумной стратегией для разбиения applicationContext.xml на компоненты, чтобы облегчить его тестирование?
Спасибо!