当前位置: 首页 > 知识库问答 >
问题:

Spring@Async - 在集成测试中未找到数据

锺博耘
2023-03-14

我试图对一个用Spring的@Async注释的方法进行单元(集成)测试。测试在内存h2数据库中设置一些数据,然后运行异步方法。异步代码看不到测试数据:O删除@Async修复了该问题。

任何帮助?:)

共有2个答案

万嘉熙
2023-03-14

事务的传播方式与@Async之前不同。

@Async和@Transactional:不起作用

您的测试可以提交数据并在测试的任一侧将其删除,从而消除了Spring在test@Transactionals内部的自动回滚。

您可以创建异步方法调用的默认访问方法,您的测试也可以直接调用该方法,尽管您将不再测试异步行为。

可能有一个更好的Spring实现来支持您需要的东西,使交易可用,但我没有。

巩镜
2023-03-14

我有同样的错误。解决方案对我来说很简单:我没有把COMMIT;放在我的data_init-h2.sql末尾

我想这也不是你放的。如果你仔细想想,这是很符合逻辑的。您的主线程启动了一个事务,但实际上并没有将它提交给h2。Spring启动另一个线程,< code>@Async方法在一个单独的事务中运行。

由于缺少提交,您在另一个线程上看不到数据更改。在主线程上,您可以看到数据更改,甚至在提交之前,就像您在该事务中一样。

 类似资料:
  • 我第一次尝试用ApacheCXF和SpringBoot开发一个soap jax ws web服务;我对这些技术的使用非常陌生。为此,我创建了一个web应用程序类型的maven项目,旨在实现我的web层服务(知道dao层和专业将通过一个实际上是带有spring boot的project maven java应用程序的程序调用)。所有这些都耦合在一个企业应用程序中。 然后我在web项目中构建了apac

  • 未能配置Spring Boot进行集成测试。冷你请看一下下面的代码: 实体 存储 库 测试配置 应用程序属性 测试用例 我尝试了不同的配置(其最新版本),但一直出现相同的异常: 更奇怪的是,异常的本质是让spring boot根据实体注释自动生成模式。因此,在插入的时候,spring必须创建表,但是看起来它并没有创建。如果有人给我一个想法,我做错了什么,或者如果有人已经面临这样的问题-请让我知道。

  • 我试图运行一个简单的Spring Boot测试,我得到的错误表明它不能在运行时MockMvc。文档表明我使用了正确的注释,并且我使用start.spring.io创建了我的pom.xml。不知道为什么会有问题。 错误: 测试代码 pom.xml

  • 我使用@Profile Spring注释在嵌入式、独立和容器管理的数据源之间进行选择。为了选择“嵌入”,我的集成测试被注释为激活适当的配置文件: 问题是,我想将'@ActiveProfiles'移动到TestConfigWrapper,但这样做没有得到执行,应用程序上下文也不会加载任何数据源。 有没有一种方法可以使用java配置来实现这一点?

  • 我有一些集成测试是这样的: 和下面这样的测试: 我希望能够抵消时钟bean在一天的不同时间运行一些测试。我该怎么做? 但那里什么都没发生。我需要@import什么吗?我需要自动连线吗? 谢谢!

  • 主要内容:1. 项目依赖,2. Spring组件,3. TestNG + Spring在本教程中,我们将演示如何使用TestNG测试Spring的组件。 使用的工具 : TestNG 6.8.7 Spring 3.2.2.RELEASE Maven 3 Eclipse IDE 1. 项目依赖 为了演示,首先创建一个名称为:TestngSpringIntegration 的 Maven 项目。 要将Spring与TestNG集成,您需要包依懒,添加以下内容: 创建文件:pom.xml