2015-05-24 2 views
0

У меня возникли проблемы при попытке запустить JUnit Test с некоторым профилем Spring, который я создал. Фактически, профили работают нормально, за исключением компонента хранилища, который нельзя автоувеличивать.Весенние профили: репозиторий не может быть автообновлен

Это фрагмент кода, который я использую для настройки упорства в весенне-интеграционном-context.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    .... Some namespaces definitions 

    <beans profile="dev"> 
     <jdbc:embedded-database id="dataSource" type="H2" /> 

     <!-- Define the JPA transaction manager --> 
     <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
      <constructor-arg ref="entityManagerFactory" /> 
     </bean> 


     <bean id="entityManagerFactory" 
      class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
      <property name="dataSource" ref="dataSource" /> 
      <property name="jpaVendorAdapter" ref="vendorAdaptor" /> 
      <property name="packagesToScan" value="guiatv.persistence.*" /> 
     </bean> 

     <bean id="abstractVendorAdaptor" abstract="true"> 
      <property name="generateDdl" value="true" /> 
      <property name="database" value="H2" /> 
      <property name="showSql" value="false" /> 
     </bean> 

     <bean id="entityManager" 
      class="org.springframework.orm.jpa.support.SharedEntityManagerBean"> 
      <property name="entityManagerFactory" ref="entityManagerFactory" /> 
     </bean> 

     <bean id="vendorAdaptor" 
      class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" 
      parent="abstractVendorAdaptor"> 
     </bean> 
    </beans> 

    ... Some other beans, some of them with the same "dev" profile 

</beans> 

Так что, хотя это было бы достаточно, окружив всю конфигурацию сохраняемости с «профилем бобы» элемент.

Теперь из моего JUnit тестового класса:

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = ApplicationTest.class) 
@ActiveProfiles("dev") 

public class ScheduleLoaderTests { 
    @Autowired 
    ScheduleLoader schedLoader; 

    @Autowired 
    ScheduleRepository shedRep; 

    @Test 
    public void someTest() { ... } 
} 

И тогда я аннотирование моего класса ApplicationTest с:

@ImportResource ("путь к классам:/META-INF/весна/интеграции /spring-integration-context.xml ")

Но когда я запускаю тест, я получаю следующее исключение:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [guiatv.persistence.repository.ScheduleRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 

Обратите внимание, что в моем тестовом классе приложение ScheduleLoader предварительно автоустанавливается, действительно, этот компонент также находится в профиле dev. Если я попытаюсь запустить тест без @ActiveProfiles («dev») аннотация, то исключение вызывается . Сбой при расписании ScheduleLoader, как и ожидалось (поскольку это только в профиле dev).

Так в чем проблема с пружинными профилями и моей конфигурацией персистентности?

PD:. Я заверил, что мое хранилище и класс объектов находятся в пределах этого

guiatv.persistence *

пакет.

Кстати, я использую Spring бутсу, так что я также пытался заставить его работать, добавив spring.profiles.active = DEV на мой application.properties файл вместо того, чтобы писать @ActiveProfiles ("DEV ") аннотация.

UPDATE

Кроме того, если я пытаюсь удалить каждые «бобы профиля» элементы, так что каждый компонент является потомком корня «бобов» элемента, все работает нормально, либо не @ActiveProfiles («dev») или с помощью аннотации @ActiveProfiles («default»).

+0

Где находится эта страница, где вы настраиваете репозитории (я думаю, это хранилища из Spring Data JPA)? – dunni

ответ

0

Теперь он работает.

@ dunni, что вы видите, это вся конфигурация, связанная с сохранением. И да, я использую JPA, но, как я уже сказал, я использую Spring Boot. Кажется, Spring Boot настраивает для вас persistence.xml (и я думаю, это то, о чем вы просили).

Итак, единственное, чего не хватало, было @SpringBootApplication на моем классе ApplicationTest, чтобы сделать репозитории автоконфигурированными Spring Boot.

И извините за мое запутанное ОБНОВЛЕНИЕ, где мне не хватало @SpringBootApplication тоже.

Смежные вопросы