当前位置: 首页 > 面试题库 >

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

夏涵畅
2023-03-14
问题内容

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

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

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

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

我想到的想法是:

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

问题答案:

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

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



 类似资料:
  • 我正在尝试设置多线程应用程序的跟踪。我已设置线程池: 所以有几个线程。其中一个线程正在侦听SQS队列: 在此代码段中

  • 我试图理解Spring事务概念。如下所示,我必须将数据插入两个不同的数据库(iSeries和DB2),但我们的iSeries版本不支持两阶段提交。要求是,只有当两个插入都成功时才应该提交事务,否则应该回滚。 如果我根据需要使用传播或REQUIRES\u NEW,我会得到错误“非法尝试使用现有的两阶段资源提交一阶段资源”。 但是如果我使用NOT_SUPPORTED或支持,它工作正常(即如果其中一个插

  • 本文向大家介绍Spring如何在一个事务中开启另一个事务,包括了Spring如何在一个事务中开启另一个事务的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Spring如何在一个事务中开启另一个事务,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 spring使用@Transactional开启事务,而且该注解使用propagation属

  • 所称的刀是: 我希望服务类中的方法在事务中运行,并在方法出现异常时回滚所有内容。但这不是在事务中运行的。 如果我将添加到DAO方法中,那么它看起来就像是在单独的事务中运行的。这是正确的吗?

  • 我尝试在我的微服务中添加一个分布式跟踪(在Azure中的Kubernetes下)。 我在父pom.xml中添加了依赖项: 我使用1.4.1和Camden.sr4是因为fabric8 kubeflix不支持较新的版本。我强制使用1.1.3版本来尝试最新的sleuth版本,看看它是否是sleuth旧版本中的一个bug。 我使用logback-spring.xml的以下配置: 这是我的applicati

  • 我想将多部分文件从一个服务传递到另一个服务。 客户- 当我将文件从Service1传递到Service2时,显示了一个错误“500内部服务器错误,当前请求不是多部分请求” 客户- 我想知道可能是什么原因,我想我错过了一些头部分时传递的多部分文件作为参数。 服务2 服务2客户端 服务1