开发者社区 > 云原生 > 中间件 > 正文

seata分支事务需要添加@transactional标记吗?

seata分支事务需要添加@transactional标记吗?

展开
收起
鸡蛋灌饼儿 2023-01-30 11:38:00 267 0
6 条回答
写回答
取消 提交回答
  • 可以参考如下:如果在一个方法里涉及到多个DB操作,比如涉及到3条update操作,我们需不需在这个方法使用spring中的@Transactional注解?针对这个问题,我们分别从两个角度考虑:不使用@Transactional注解 和 使用@Transactional注解。

    不使用@Transactional注解
    1、在提交阶段,因为该分支事务有3条update操作,每次执行update操作的时候,都会通过数据代理向TC注册一个分支事务,并为其生成对应的undo_log,最终3个update操作被当作3个分支事务来处理

    2、在回滚阶段,需要回滚3个分支事务

    3、数据的一致性通过seata全局事务来保证

    使用@Transactional注解

    1、在提交阶段,3个update操作被当作一个分支事务来提交,所以最终只会注册一个分支事务

    2、在回滚阶段,需要回滚1个分支事务

    3、数据的一致性:这3个update的操作通过本地事务的一致性保证;全局一致性由seata全局事务来保证。此时3个update仅仅是一个分支事务而已

    ——参考来源于SEATA官方文档

    2023-12-23 20:03:19
    赞同 1 展开评论 打赏
  • 北京阿里云ACE会长

    在Seata中,如果您使用的是AT(Automatic Transaction)模式,那么在处理分支事务时,通常不需要在方法上添加@Transactional注解。因为AT模式会自动为每个分支事务创建一个事务,并且会自动处理事务的提交和回滚。
    但是,在某些情况下,您可能需要手动控制事务。例如,当您需要在分支事务中执行一些非数据库操作,或者需要在分支事务中与其他事务协同工作时,您可能需要手动添加@Transactional注解。在这种情况下,您可以在方法上添加@Transactional注解,并配置相关的事务参数,例如propagation、isolation等。

    2023-12-19 20:33:22
    赞同 展开评论 打赏
  • 冲冲冲

    Seata分支事务不需要添加@Transactional标记。

    2023-12-19 17:52:06
    赞同 展开评论 打赏
  • 在使用Seata进行分支事务管理时,确实需要使用@Transactional注解。这个注解是用来标识那些需要参与分布式事务的业务方法的。这些被@Transactional注解标记的方法就构成了所谓的"分支事务"。

    然后,在全局事务方法中,你可以调用这些被@Transactional注解标记的分支事务方法。这样一来,当全局事务方法被执行时,与之相关的分支事务也会被一并执行。

    2023-12-13 17:37:24
    赞同 展开评论 打赏
  • Seata分支事务不需要添加@Transactional标记。Seata使用的是自己的事务管理机制,与Spring的@Transactional注解是不同的。

    2023-12-13 16:45:13
    赞同 1 展开评论 打赏
  • 在使用Seata进行分布式事务管理时,我们通常使用@GlobalTransactional注解来开启一个全局在使用Seata进行分布式事务管理时,我们通常使用@GlobalTransactional注解来开启一个全局事务。这个注解能扫描到并开启一个全局事务,是Seata AT模式的核心,对业务无侵入,是一种改进后的两阶段提交。

    然而,对于分支事务的管理,我们并不需要使用@Transactional注解。具体来说,分支事务的开启、上报和回滚都是通过向TC(事务协调器)注册分支事务,接收TC的命令来完成的。因此,在使用Seata进行分支事务管理时,无需添加@Transactional标记。
    image.png

    https://seata.io/zh-cn/blog/seata-at-tcc-saga/

    2023-12-12 09:08:40
    赞同 展开评论 打赏
滑动查看更多

为企业提供高效、稳定、易扩展的中间件产品。

相关电子书

更多
《Seata 1.3 新特性以及如何参与社区》 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载