Spring、SpringBoot:声明式事务和编程式事务源码

一、前言

在现代软件开发中,事务处理是必不可少的一部分。当多个操作需要作为一个整体来执行时,事务可以确保数据的完整性和一致性,并避免出现异常和错误情况。在SpringBoot框架中,我们可以使用声明式事务和编程式事务来管理事务处理。其中事务的坑也是不少,比较常见的就是事务失效,大家可以看看!后面小编在出一篇事务失效场景哈,喜欢的可以关注,等待更新哈!

这篇博客将重点探讨这两种事务处理方式的源码实现、区别、优缺点、适用场景以及实战。 我们来接着说事务,里面还涉及到三个知识点,大家可以自行百度好好了解!

  • 事务的特性
  • 事务的传播行为
  • 隔离级别

本篇文章主要讲的就是实现事务的两种方式的分析!

让我们开始探索声明式事务和编程式事务吧!

文章很长,耐心看完希望对你有帮助!

本文源码是使用:springboot2.7.1

二、开启使用和大致源码实现

1. 开启使用

我们在启动类上添加注解:@EnableTransactionManagement

后续使用就可以添加注解@Transactional(rollbackFor = Exception.class)使用,或者是使用编程式事务使用了 ! 后面我们在详细演示怎么使用哈!

2. 声明式事务源码

public class TransactionInterceptor extends TransactionAspectSupport 
	implements MethodInterceptor, Serializable{}
复制代码

TransactionInterceptor UML图:

声明式事务主要是通过AOP实现,主要包括以下几个节点:

  1. 启动时扫描@Transactional注解:在启动时,Spring Boot会扫描所有使用了@Transactional注解的方法,并将其封装成TransactionAnnotationParser对象。

  2. AOP 来实现事务管理的核心类依然是 TransactionInterceptor。TransactionInterceptor 是一个拦截器,用于拦截使用了 @Transactional 注解的方法

  3. 将TransactionInterceptor织入到目标方法中:在AOP编程中,使用AspectJ编写切面类,通过@Around注解将TransactionInterceptor织入到目标方法中

  4. 在目标方法执行前创建事务:在目标方法执行前,TransactionInterceptor会调用PlatformTransactionManager创建一个新的事务,并将其纳入到当前线程的事务上下文中。

  5. 执行目标方法:在目标方法执行时,如果发生异常,则将事务状态标记为ROLLBACK_ONLY;否则,将事务状态标记为COMMIT

  6. 提交或回滚事务:在目标方法执行完成后,TransactionInterceptor会根据事务状态(COMMIT或ROLLBACK_ONLY)来决定是否提交或回滚事务。

源码:

@Override
@Nullable
public Objec
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值