У меня есть приложение Spring Boot 1.5.21 с этим основным классом:
package com.myorg.myapp
@EnableSpringHttpSession
@EnableCaching
@SpringBootApplication
class MySpringBootApplication(private val env: Environment) {
Я хочу запустить интеграционные (@DataJpaTest
) тесты без настройки внешнего кэша.
package com.myorg.myapp.repository
@ExtendWith(SpringExtension::class)
@DataJpaTest
class MyRepositoryTest(@Autowired private val libraryRepository: LibraryRepository) {
@Test
fun shouldDoSomething() {
...
}
}
Проблема в том, что он выдает исключение, потому что не может найти компонент SessionRepository:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.session.SessionRepository<?>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1486)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1097)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1059)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:835)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741)
... 63 more
@DataJpaTest
внутренне сканирует конфигурацию основного класса (MySpringBootApplication
), которая содержит аннотацию @EnableSpringHttpSession
,Это импортирует @Import(SpringHttpSessionConfiguration.class)
, который нуждается в компоненте SessionRepository:
@Bean
public <S extends ExpiringSession> SessionRepositoryFilter<? extends ExpiringSession> springSessionRepositoryFilter(
SessionRepository<S> sessionRepository) {
Так как я могу заставить мои @DataJpaTest
классы не инициализировать конфигурацию внешнего сеанса?
Я пробовал с excludeFilter, ноэто не сработало:
@DataJpaTest(excludeFilters = [ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value= [SpringHttpSessionConfiguration::class])])