Spring 中使用 Spring JPA 和事务的多线程事务奇偶校验

Multithreaded Transaction Parity in Spring Using Spring JPA and Transactions

提问人:Errori 提问时间:8/29/2023 最后编辑:Errori 更新时间:8/29/2023 访问量:35

问:

(使用 Springboot 3.1.2) 我有一个服务 (Foo),它将异步调用 1-3 个其他服务(Bar、Bizz、Buzz)。Bar、Bizz 和 Buzz 都会在数据库中的 1-3 个模式中提交类似的数据。我想要它,如果一个事务由于任何原因在一个架构中失败,我们可以回滚其他模式,如果它在所有 3 个中都成功,我们将其保存在所有 3 个中。

我尝试在主服务 Foo 周围放置一个@Transaction,但这不适用于多线程。我已经将 Bar、Bizz 和 Buzz 都@Transactional但是一旦它们的主要逻辑结束,它将在线程加入 Foo 之前提交交易。在 Spring 中,有没有一种简单的方法可以在不同的交易之间实现奇偶校验?或者我是否必须使用更基本的 JDBC 方法来处理提交?

java spring-data-jpa spring- 事务

评论

1赞 M. Deinum 8/29/2023
跨 HTTP 的事务是您想要的和不存在的。你需要编写逻辑来做一个补偿性事务(即删除提交的东西)。
0赞 Stanislav Bashkyrtsev 8/29/2023
你是说SpringBoot 3.1.2?大多数 Spring Source 库现在都是 6。
0赞 Chris 8/30/2023
您想要的内容可能属于所谓的分布式事务,其中 XA 事务管理器为您处理多个事务。首先,请参阅 docs.spring.io/spring-boot/docs/2.0.x/reference/html/...,并有关于各种选项的演示。不过,线程可能不应该是异步的 - 它们必须能够全部参与同一个事务范围,并且事务管理器处理将其拆分为多个 XA 资源。但是,如果所有架构都位于同一个数据库中,它们不能只使用相同的连接/事务吗?

答: 暂无答案