Spring Transaction commit order

时间:2018-03-20 03:39:18

标签: spring spring-transactions javadb

我对Spring事务管理中的提交顺序有疑问。我目前的申请要求我在哪里使用

    

我的事务触发器从MQ接收......

以下是行动的顺序:

  1. MQ收到消息
  2. 数据库插入3个表 - - 程序调用
  3. 数据库插入3个表 - - 程序调用
  4. 数据库插入3个表 - - 程序调用
  5. MQ post message下游队列
  6. MQ将消息发布到第二个下游队列
  7. 我测试了所有回滚案例。一个 当第6步失败时,它会回滚所有数据库事务,包括第5步MQ回滚。

    我的问题是,一旦我们发布消息我想了解提交顺序..它会在MQ提交到下游队列之前提交所有3 DB事务吗?

    因为我想限制事务提交的顺序。 它必须按顺序1,2,3,4,5然后6

    一旦我们发布消息,下游应用程序将访问我们在上面解释的此事务中插入的相同表。

    任何人都可以指导我吗?如何提交交易?

1 个答案:

答案 0 :(得分:0)

提交顺序正如您所期望的那样,但请记住以下几点: 据我了解,你只有一次交易。此事务将从消息接收开始,其他操作将添加到此单个transaccion(这是许多事务API中的默认行为)。
这意味着您只有 ONLY 一个事务,因此只有一个全局提交(它实际上是2次提交,一次是数据库系统,一次是队列系统)。
这也意味着导致回滚的任何失败将影响数据库和队列系统(如果已配置,消息将返回队列或重试队列)。

为了给你一个正确的答案,我需要知道你希望它如何运作。

  • 如果是这样的话:“即使最后一步失败,该消息也被认为是成功的,应该提交数据库更改” 为此,您可能需要在单独的事务中包含这些步骤(您可以检查事务注释的Spring Transactional
  • 的spring文档
  • 如果不同,我需要了解更多细节。
相关问题