事务
- 本文只介绍声明式事务管理,即使用AOP实现,使用
@Transactional
开始事务 - 事务角色
- 事务管理员:发起事务方,在Spring中通常指代业务层开启事务的方法
- 事务协调员:加入事务方,在Spring中通常指代数据层方法,也可以是业务层方法
接口介绍
-
PlatformTransactionManager
:Spring事务管理器接口-
TransactionStatus getTransaction()
:获取事务状态信息-
Spring 将事务的配置详细信息封装到
TransactionDefinition
对象中,此方法用于获得事务状态TransactionStatus
-
public interface TransactionStatus{ boolean isNewTransaction(); // 是否是新的事务 boolean hasSavepoint(); // 是否有恢复点 void setRollbackOnly(); // 设置为只回滚 boolean isRollbackOnly(); // 是否为只回滚 boolean isCompleted; // 是否已完成 }
-
-
void commit()
:提交事务 -
void rollback()
:回滚事务
-
-
TransactionDefinition
:事务定义信息String getName()
:获取事务对象名称。int getlsolationLevel()
:获取事务的隔离级别。int getPropagationBehavior()
:获取事务的传播行为.int getTimeout()
:获取事务的超时时间。boolean isReadOnly()
:获取事务是否只读。
-
TransactionStatus
:事务运行状态void flush()
:刷新事务boolean hasSavepoint()
:获取是否存在保存点boolean isCompleted()
:获取事务是否完成boolean isNewTransaction()
:获取是否是新事务boolean isRollbackOnly()
:获取是否回滚void setRollbackOnly()
:设置事务回滚
事务传播行为
-
介绍
-
当事务方法被另一个事务方法调用时,需要指定事务应该如何进行传播
-
使用
@Transactional
注解开启事务后,还需要在其中增加
-
常用的事务传播行为
![image-20230609150010403](https://gitee.com/Wgdegitee/drawing-bed/raw/master/imgs/image-20230609150010403.png)
TransactionDefinition.PROPAGATION_REQUIRED
- 若当前存在事务则加入,若没有事务则新建一个
- 默认的事务传播行为,也是最常用的
TransactionDefinition.PROPAGATION_REQUIRES_NEW
- 创建新事务,若当前存在事务则将其挂起
- 不管外部方法是否开启事务,都会开启自己事务,且开启的事务相互独立互不干扰
TransactionDefinition.PROPAGATION_NESTED
- 在外部方法开启事务时在内部开启新事务
- 若外部方法无事务则使用
PROPAGATION_REQUIRED