Spring事务管理概述

Spring的事务管理简化了传统的事务管理流程,并且在一定程度上减少了开发人员的工作量。

事务管理的核心接口

spring-tx-5.2.8.RELEAS依赖包的3个接口

  1. PlatformTransactionManager接口:可以根据属性管理事务。
  2. TransactionDefinition接口:用于定义事务的属性。
  3. TransactionStatus接口:用于界定事务的状态 。

PlatformTransactionManager接口
   PlatformTransactionManager 接口主要用于管理事务,该接口中提供了三个管理事物的方法。

表1 PlatformTransactionManager 接口管理事务的方法
方法说明
TransactionStatus用于获取事务状态信息
void commit(TransactionStatus status)用于提交事务
void rollback(TransactionStatus status)用于回滚事务

TransactionDefinition接口
  TransactionDefinition接口中定义了事务描述相关的常量,其中包括了事务的隔离级别、事务的传播行为、事务的超时时间和是否为只读事务。

  1. 事务的隔离级别
表2 TransactionDefinition接口中定义隔离级别
隔离级别说明
ISOLATION_DEFAULT采用当前数据库默认的事务隔离级别。
ISOLATION_READ_UNCOMMITTED读未提交。允许另外一个事务读取到当前未提交的数据,隔离级别最低,可能会导致脏读、幻读或不可重复读。
ISOLATION_READ_COMMITTED用读已提交。被一个事务修改的数据提交后才能被另一个事务读取,可以避免脏读,无法避免幻读,而且不可重复读。
ISOLATION_ REPEATABLE_READ允许重复读,可以避免脏读,资源消耗上升。这是MySQL数据库的默认隔离级别
REPEATABLE_SERIALIZABLE事务串行执行,也就是按照时间顺序一一执行多个事务,不存在并发问题,最可靠,但性能与效率最低。
  1. 事务的传播行为

  事务的传播行为是指处于不同事务中的方法在相互调用时,方法执行期间,事务的维护情况。例如,当一个事务的方法B调用另一个事务的方法A时,可以规定A方法继续在B方法所属的现有事务中运行,也可以规定A方法开启一个新事务,在新事务中运行,B方法所属的现有事务先挂起,等A方法的新事务执行完毕后再恢复。

表3 TransactionDefinition接口中定义的7种事务传播行为
隔离级别说明
PROPAGATION_REQUIRED默认的事务传播行为。如果当前存在一个事务,则加入该事务;如果当前没有事务,则创建一个新的事务。
PROPAGATION_SUPPORTS读未提交。允许如果当前存在一个事务,则加入该事务;如果当前没有事务,则以非事务方式执行。
PROPAGATION_MANDATORY当前必须存在一个事务,如果没有,就抛出异常。
PROPAGATION_REQUIRES_NEW创建一个新的事务,如果当前已存在一个事务,将已存在的事务挂起。
PROPAGATION_NOT_SUPPORTED不支持事务,在没有事务的情况下执行,如果当前已存在一个事务,则将已存在的事务挂起。
ROPAGATION_NEVER永远不支持当前事务,如果当前已存在一个事务,则抛出异常。
PROPAGATION_NESTED如果当前存在事务,则在当前事务的一个子事务中执行。
  1. 事务的超时时间

  事务的超时时间是指事务执行的时间界限,超过这个时间界限,事务将会回滚。TransactionDefinition接口提供了TIMEOUT_DEFAULT常量定义事务的超时时间。

  1. 事务是否只读

  当事务为只读时,该事务不修改任何数据,只读事务有助于提升性能,如果在只读事务中修改数据,会引发异常。
  TransactionDefinition接口中除了提供事务的隔离级别、事务的传播行为、事务的超时时间和是否为只读事务的常量外,还提供了一系列方法来获取事务的属性。

表4 TransactionDefinition接口常用方法

方法说明
int getPropagationBehavior()返回事务的传播行为
int getIsolationLevel()返回事务的隔离层次
int getTimeout()返回事务的超时属性
boolean isReadOnly()判断事务是否为只读
String getName()返回定义的事务名称

TransactionStatus接口

表5 TransactionDefinition接口常用方法

方法说明
boolean isNewTransaction()判断当前事务是否为新事务
boolean hasSavepoint()判断当前事务是否创建了一个保存点
boolean isRollbackOnly()返判断当前事务是否被标记为rollback-only
void setRollbackOnly()将当前事务标记为rollback-only
boolean isCompleted()返判断当前事务是否已经完成(提交或回滚)
void flush()刷新底层的修改到数据库

Spring中的事务管理的两种方式

Spring中的事务管理分为两种方式,一种是传统的编程式事务管理,另一种是声明式事务管理。

  • 编程式事务管理:通过编写代码实现的事务管理,包括定义事务的开始、正常执行后的事务提交和异常时的事务回滚。

  • 声明式事务管理:通过AOP技术实现的事务管理,其主要思想是将事务管理作为一个“切面”代码单独编写,然后通过AOP技术将事务管理的“切面”代码植入到业务目标类中。

谢谢浏览!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值