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

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

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

  1. 创建几个域对象并通过DAO持久化它们
  2. 调用服务方法启动工作
  3. 等待作业完成
  4. 使用DAO检索域对象并检查其状态

显然,以上所有操作都应在一个事务中执行,但是不幸的是,事务不会传播到新线程中(我理解这背后的原理)。

我想到的想法是:

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

回答:

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

可以将任务执行程序配置移至单独的spring配置xml文件。它有两个版本-

一个带有在测试期间使用的SyncTaskExecutor,另一个带有用于生产运行的AsyncTaskExecutor。

以上是 如何将Spring事务传播到另一个线程? 的全部内容, 来源链接: utcz.com/qa/414241.html

回到顶部