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

时间:2016-06-16 17:05:43

标签: spring asynchronous spring-boot integration-testing

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

有任何帮助吗? :)

2 个答案:

答案 0 :(得分:0)

事务不像@Async之前那样传播。

@Async and @Transactional: not working

您的测试可以提交数据并在测试的任一侧删除它,删除Spring在测试@Transactionals中的自动回滚。

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

可能有更好的春季实施支持您所需要的,使交易可用,但我没有。

答案 1 :(得分:0)

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

的末尾放置COMMIT;

我想您也没有放这个。如果您考虑一下,这是很合逻辑的。您的主线程启动了一个事务,但实际上并未将其提交到h2。 Spring启动另一个线程,并在单独的事务中在其中运行@Async方法。

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