【Spring 】 Spring @Transactional-嵌套事物回滚

309 篇文章 448 订阅 ¥39.90 ¥99.00

1.美图

在这里插入图片描述

2.概述

事务回滚参考:Spring : Spring @Transactional-事物回滚

嵌套事务参考:Spring: 事务传播机制

3.前文回顾

// 2.如果当前已经存在事物
// 重点:
// 如果当前已经存在启动的事物,则根据本次要新建的事物传播特性进行评估,以决定对新事物的后续处理
if (isExistingTransaction(transaction)) {
   
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
@Transactional 注解是 Spring 框架中的一个特性,用于控制事务处理,当它被应用到方法或类上时,Spring 容器会自动管理该方法或类中所有符合特定规则的方法的事务。如果你在一个方法中使用了 @Transactional 并且这个方法又调用了其他方法,Spring 会根据一些规则来决定如何处理这些内部调用的方法: 1. 如果内部方法上也标注了 @Transactional,那么有两种行为: - `propagation = DEFAULT` 或未指定 propagation 属性(默认):默认情况下,Spring 会选择传播行为(Propagation)。这取决于外部方法的事务状态,如果外部方法在一个事务中,则内部方法也在该事务中执行;如果外部方法没有事务,那么内部方法将开始一个新的事务。 - `propagation = REQUIRES_NEW`:表示内部方法总是开始一个新的事务,即使外部方法已经在一个事务中。 2. 如果内部方法没有 @Transactional 标注,Spring 会根据 `propagation` 属性的设置来决定是否为它们开启事务: - 如果 propagation 设置为 `REQUIRED`,内部方法会在外部方法的事务上下文中执行,如果没有外部事务则新建一个。 - 对于其他传播行为如 `NEVER`, `NOT_SUPPORTED`, `MANDATORY`,它们有自己的特定规则,比如 `NEVER` 表示内部方法不会有自己的事务。 3. 如果内部方法是一个静态方法,那么 @Transactional 无效,因为静态方法不关联任何实例,无法参与到事务中。 相关问题: 1. 在哪些情况下,Spring 会自动回滚内部方法的事务? 2. 如何避免在 @Transactional 方法内部调用其他方法时引发事务嵌套过深的问题? 3. `propagation` 属性有哪些可选值,它们分别代表什么意思?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九师兄

你的鼓励是我做大写作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值