如何将Spring事务传播到另一个线程?
也许,我做错了,但在以下情况下我找不到好的出路。
我想对使用下面的Spring Batch执行作业的服务进行单元测试。通过AsyncTaskExecutor
在单独的线程中预配置来执行作业。在我的单元测试中,我想:
- 创建几个域对象并通过DAO持久化它们
- 调用服务方法启动工作
- 等待作业完成
- 使用DAO检索域对象并检查其状态
显然,以上所有操作都应在一个事务中执行,但是不幸的是,事务不会传播到新线程中(我理解这背后的原理)。
我想到的想法是:
- 在步骤(1)之后提交交易#1。不好,因为在单元测试后应该回滚数据库状态。
Isolation.READ_UNCOMMITTED
在作业配置中使用。但这需要两种不同的配置进行测试和生产。
回答:
我认为最简单的解决方案是在测试执行期间使用SyncTaskExecutor配置JobLauncher-这样,作业将在与测试相同的线程中执行并共享事务。
可以将任务执行程序配置移至单独的spring配置xml文件。它有两个版本-
一个带有在测试期间使用的SyncTaskExecutor,另一个带有用于生产运行的AsyncTaskExecutor。
以上是 如何将Spring事务传播到另一个线程? 的全部内容, 来源链接: utcz.com/qa/414241.html