Spring事务传播机制

本文详细解析了Spring事务处理的流程,从代码层面探讨了@Transitional注解的工作原理,包括事务属性的获取、TransactionManager的加载以及不同事务处理逻辑。接着,介绍了Spring的事务传播行为,如REQUIRED、SUPPORTS、MANDATORY、REQUIRES_NEW、NOT_SUPPORTED、NEVER和NESTED,并通过示例说明了它们在不同场景下的应用和效果。
摘要由CSDN通过智能技术生成

目录

零、Spring事务大致流程。

一、代码层面。

二、详细拆分 。

三、举例精讲。


 

零、Spring事务大致流程。

一般我们使用注解方式@Transitional,那么Spring容器首先会提取事务标签:

1、查看方法中是否存在事务声明;有则返回

2、否则,查看方法所在类中是否存在事务声明;有则返回

3、否则,如果存在接口,则到接口中去寻找;有则返回

拿到注解信息后就会解析详细的属性信息。

声明式事务处理主要步骤:

a、获取事务属性;只有存在事务属性一切才可谈,否则其他功能无从谈起。

b、加载配置中配置的TransactionManager 。

c、不同事务处理方式使用不同的逻辑。

d、在目标方法执行前获取事务并收集事务信息。

事务信息和事务属性-也就是TransitionInfo和TransitionAttribute并不相同,TransitionInfo包含TransitionAttribute信息,但是除了TransitionAttribute外还有其他事务信息,如:PlatformTransactionManager以及TransitionStatus相关信息。

e、执行目标方法。

f、一旦出现异常,尝试异常处理。默认回滚运行时异常。

g、提交事务前的事务信息清楚。

h、提交事务。

 

一、代码层面。

Spring中定义了其中事务传播行为:

TransactionDefinition中定义如下

    //传播机制 必须在一个事务内运行有则加入当前事务执行,否则创建新的事务执行
    int PROPAGATION_REQUIRED = 0;
    //传播机制 支持事务:有则加入当前事务,没有则以非事务运行 
    int PROPAGATION_SUPPORTS = 1;
    //传播机制 强制:有则加入当前事务,没有则抛出异常    
    int PROPAGATION_MANDATORY = 2;
    //传播机制 创建一个新事务,如果当前存在事务,则将当前事务挂起
    int PROPAGATION_REQUIRES_NEW = 3;
    //传播机制 以非事务方式运行,如果存在则挂起当前事务
    int PROPAGATION_NOT_SUPPORTED = 4;
    //传播机制 以非事务方式运行,如果存在则抛出异常
    int PROPAGATION_NEVER = 5;
    //传播机制 如果当前存
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值