- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Spring boot @DataJpaTest exclude filter donsn't work
我见过这个问题,但就我而言,他的方法不起作用。
我必须使用存储过程从 SQL 服务器检索数据,然后将数据保存在 Mongo 中。由于 Spring Data R2DBC 尚不支持存储过程,因此我被迫使用 Spring JPA。在 Mongo 方面,我使用 ReactiveMongoTemplate 等。 (我知道这并不理想,因为我一侧阻塞,另一侧非阻塞,但无论如何,该项目仍在发展,这部分缺乏设计)
因此,当我使用 @DataJpaTest
进行集成测试时,出现以下错误:
java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:132)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:123)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:118)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
at org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener.prepareTestInstance(SpringBootDependencyInjectionTestExecutionListener.java:43)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:244)
at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:98)
at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$5(ClassBasedTestDescriptor.java:337)
at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:342)
at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$6(ClassBasedTestDescriptor.java:337)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1654)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:312)
at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735)
at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734)
at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658)
at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:336)
at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:259)
at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$2(ClassBasedTestDescriptor.java:252)
at java.base/java.util.Optional.orElseGet(Optional.java:369)
at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$3(ClassBasedTestDescriptor.java:251)
at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:29)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$1(NodeTestTask.java:107)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:107)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:75)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:229)
at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$6(DefaultLauncher.java:197)
at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:211)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:191)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:128)
at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:69)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)
Caused by: org.springframework.dao.InvalidDataAccessApiUsageException: Reactive Repositories are not supported by JPA. Offending repository is somepath.mongo.CouponRepository!
at org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport.useRepositoryConfiguration(RepositoryConfigurationExtensionSupport.java:367)
at org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport.getRepositoryConfigurations(RepositoryConfigurationExtensionSupport.java:107)
at org.springframework.data.repository.config.RepositoryConfigurationDelegate.registerRepositoriesIn(RepositoryConfigurationDelegate.java:148)
at org.springframework.boot.autoconfigure.data.AbstractRepositoryConfigurationSourceSupport.registerBeanDefinitions(AbstractRepositoryConfigurationSourceSupport.java:62)
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:385)
at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:684)
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:384)
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:148)
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:331)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:236)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:275)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:95)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:706)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:532)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:126)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
... 64 more
然后我知道它想要加载所有 bean,包括 Reactive 的 bean。所以我尝试排除它们:
@DataJpaTest(excludeFilters = @ComponentScan.Filter(
classes = {
ReactiveMongoTransactionConfig.class, SecurityService.class, PromotionFactsSyncConfiguration.class,
CouponRepository.class, CouponMongoService.class,
FactsCompanyInfoProvider.class, CouponTypeRefService.class
})
)
我排除:
CouponRepository
:响应式(Reactive)存储库CouponMongoService
和其他:谁使用此存储库但我仍然收到此错误,为什么?
我的应用程序类:
@SpringBootApplication
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp .class, args);
}
}
最佳答案
现在我自己解决了。好的...
看起来像:
@DataJpaTest // no filters here
@EnableJpaRepositories(basePackages = "somepath.repository.jpa") // crucial: detect JPA repositories with a base package; it was in the main config file, I copy it here
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) // use application datasource, instead of embedded db
@TestPropertySource(locations = "classpath:application-preprod-db.properties") // "spring.datasource....." all the url and platform configs; I had to isolate them in a separate file
我还发现我无法使用 @ActiveProfiles()
读取 yaml 中的配置,尽管我在 yml 文件中没有任何反应式 mongo 配置;如果我使用它,它会提示“restMongoTemplate bean not found”,所以我猜在这种情况下会加载上下文。
关于java - @DataJpaTest 无法排除响应式(Reactive) mongo 存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60847154/
我试图找出为什么我的单元测试不起作用。我看到 Hibernate 在更新之前做了一个插入。 为什么这样做? 是测试失败的原因吗? 我已经为测试环境设置了 hsqldb,该服务在 mysql 中似乎运行
我有一个使用 Spring Boot 的中等大小的项目,我正在尝试创建我的第一个带有嵌入式 H2 的 DataJpaTest,但我收到以下异常: org.hibernate.tool.schema.s
我有一个名为 TagRepository 的 spring-data-jpa 存储库。我的 spring-boot 版本是 2.1.2。我在运行时范围内使用 H2 依赖项,我打算将它用于应用程序和集成
在一个SpringBoot应用中,我想对repository层做一些测试。 @RunWith(SpringRunner.class) @DataJpaTest public class VisitRe
我有一个 Employee具有以下列的实体: @Entity class Employee { @Column(name = "first_name", length = 14) privat
默认 @DataJpaTest扫描所有 jpa 存储库和 @Entity .就我而言,我有 5 个存储库包和 5 个实体包。例如 com.acme.product.entity与....关联com.a
让我们假设一个自定义基础 JpaRepository实现如下。 public class SimpleCustomJpaRepository extends SimpleJpaRepository i
在 Windows (+ Maven) 上,我对 Métro 词的 é 有疑问。我的 sql 文件是用 UTF-8 编码的。我在 Unix 服务器上确实遇到了这个问题。 我的 Maven 错误: ex
我正在尝试使用 Spring @DataJpaTest 注释创建存储库测试。即使是简单的演示项目,我也会收到 IllegalArgumentException: Unknown entity。我错过了
我想用 Spring Boot 测试一个存储库,并想包含 TestEntityManager 来检查存储库是否真的做了它应该做的事情。 那是 JUnit 测试: @RunWith(SpringRunn
我正在尝试使用 @DataJpaTest 设置我的数据库单元测试注释以避免加载完整的 Spring 应用程序上下文。但它的执行方式与我使用 @SpringBootTest 时的方式不同。 + 配置的
我尝试使用注释 @DataJpaTest 编写集成测试。 我有两个数据源:主要和次要(类配置) 结果我有一个错误: expected single matching bean but found 2:
我正在使用 SpringBoot/Kotlin/JPA/Hibernate/Junit 并拥有 JpaServiceTest 类来执行与单个实体相关的存储库方法。 JpaService 类的方法名称遵
我使用@DataJpaTest 注释创建了一个测试。 hsqldb 已配置,但出现错误: No qualifying bean of type [org.springframework.jdbc.co
我编写了这个包含自定义查询的存储库: @Repository interface PersonRepository : JpaRepository { @Query("UPDATE Perso
我想将测试容器与 @DataJpaTest 一起使用(和 @SpringBootTest )使用 JUnit 5。我使用 @Testcontainers 进行基本设置工作和 @Container像这样
我在数据层中有几个实体以特定的架构存储。例如: @Entity @Table(name = "FOO", schema = "DUMMY") public class Foo {} 我正在尝试设置H2
我想使用 Controller 和存储库通过 Spring Boot 上下文配置创建完整的 JUnit 测试。我的测试类如下所示: @RunWith(SpringRunner.class) @Spri
Spring boot @DataJpaTest exclude filter donsn't work 我见过这个问题,但就我而言,他的方法不起作用。 我必须使用存储过程从 SQL 服务器检索数据,
我正在从 spring-boot 1.5.x 迁移到 2.0.4,并注意到 @DataJpaTest 的一个有趣的案例/行为 我有一个测试 @ExtendWith(SpringExtension.cl
我是一名优秀的程序员,十分优秀!