Spring学习-Spring Tx

一.概述

Spring Tx 全称为 Spring Transaction Management(Spring 事务管理),是 Spring 为 DB 事务管理提供过的一种便捷的接入方式。

二.导入依赖

Step1:在 pom.xml 中导入 spring-tx 依赖

Spring学习-Spring Tx_第1张图片

Step:刷新 Maven 依赖,可以看到 spring-tx 联动依赖 spring-core 和 spring-beans 库

Spring学习-Spring Tx_第2张图片

三.Spring 目前常用的事务两种机制

  • 注解式:通过 @Transactional 注解指定的 public 方法,在外部调用的时候通过 AOP 机制,在方法前后自动开启和提交/回滚事务。
  • 回调式:通过 TransactionTemplate 组件,提交一个回调方法,在方法前后自动开启和提交/回滚事务,并提供了对事务状态的人孔控制。

准备工作:

  • Step1:新建一个 biz.service 包
  • Step2:新建一个 UserService 类
  • Step3:在 UserService 类填入预备方法 

 Spring学习-Spring Tx_第3张图片

四.注解式事务管理

优点:简单易用,不侵入业务逻辑代码,不会造成可读性和维护性的下降。

缺点:控制粒度较粗,容易造成大事务;类内部调用无法开启事务,容易掉坑。

场景:独立调用 DAO 层的纯 DB 操作

Step1:手工开启事务管理

 Spring学习-Spring Tx_第4张图片

Step2:标注需要事务管理的方法

Spring学习-Spring Tx_第5张图片

五.回调式事务管理

优点:控制粒度较细,事务的边界可见即所得,不存在类内部调用失效的暗坑。

缺点:侵入业务逻辑代码,可读性和维护性会有少许下降

场景:Service 层的精细跨表多 DB 操作的事务控制

Step1:注入事务管理器 TransactionTemplate(后面简称TM)

Step2:使用TM调用execute或者executeWithoutResult方法,将需要DB事务的代码通过Lambda表达式包裹起来

Spring学习-Spring Tx_第6张图片

六.回调式事务管理中的提交和回滚

匿名接口方法回调式

Spring学习-Spring Tx_第7张图片

Lambda 表达式

无论是哪种表达形式,都可以通过 TransactionStatus 来手动控制事务的提交或者回滚,一种常见的形式如下:

Spring学习-Spring Tx_第8张图片

本文章整理自上课PPT,仅供学习使用

你可能感兴趣的:(Spring学习,spring,学习,java,spring,tx,事务)