gpt4 book ai didi

java - 如何将 Spring 事务传播到另一个线程?

转载 作者:搜寻专家 更新时间:2023-11-01 02:16:57 25 4
gpt4 key购买 nike

也许,我做错了什么,但我找不到以下情况的好出路。

我想对使用 Spring Batch 的服务进行单元测试下面执行作业。这些作业通过预配置的 AsyncTaskExecutor 在单独的线程中执行。在我的单元测试中,我想:

  1. 创建少量域对象并通过 DAO 持久化
  2. 调用服务方法启 Action 业
  3. 等到作业完成
  4. 使用 DAO 检索域对象并检查它们的状态

显然,以上所有内容都应该在一个事务中执行,但不幸的是,transactions are not propagated to new threads (我理解这背后的理由)。

我想到的想法:

  • 在步骤 (1) 之后提交事务#1。不好,因为数据库状态应该在单元测试后回滚。
  • 在作业配置中使用Isolation.READ_UNCOMMITTED。但这需要两种不同的测试和生产配置。

最佳答案

我认为最简单的解决方案是在测试执行期间使用 SyncTaskExecutor 配置 JobLauncher - 这样作业就会在与测试相同的线程中执行并共享事务。

任务执行器配置可以移动到单独的 spring 配置 xml 文件中。有两个版本 - 一个带有在测试期间使用的 SyncTaskExecutor,另一个带有用于生产运行的 AsyncTaskExecutor。

关于java - 如何将 Spring 事务传播到另一个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5232351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com