Spring中的事务管理

事务的概念

事务代表逻辑上的一组操作要么一起成功, 要么一起失败.
可以想一下转账的例子.

事务的特性 ACID

原子性: 事务是不可分割的.
一致性: 事务执行前后数据保持一致
隔离性: 事务并发执行
持久性: 事务只要被提交就会永久保持

隔离级别及出现的问题

脏读: 一个事务读取到另一个数据事务改写还未提交的数据
不可重复度: 同一个事务里读到另一个事务已经提交的更新的数据, 一次事务中多次查询结构不一致
幻读: 一个事务读取了另一个事务已经提交的 insert 而导致事务中查询结构不一致

在这里插入图片描述
在这里插入图片描述
MySQL的默认隔离级别 不可重复读 repeatable_read 会出现幻读问题
Oracle的默认隔离级别 读已提交 read_committed 会出现 不可重复读, 幻读问题

Spring接口

Spring事务管理包括三个接口
事务管理器 PlatformTransactionManager
具体的实现类 DataSourceTransactionManager, HibernateTransactionManager 等等 事务管理器

Spring会为不同的持久化框架 选择不同的 PlatformTransactionManager 接口实现
在这里插入图片描述
TransactionDefinition
事务定义信息(隔离, 传播, 超时, 只读)
隔离级别
TransactionStatus

事务的传播行为

事务的传播行为机制 主要解决业务层中 方法之间相互调用的问题, 也就是不同业务中存在不同事务如何处理.
在这里插入图片描述
7种传播行为, 分为三类 前三个第一类 紧接着 三个 第二类 最后一个 第三类

保证多个操作在同一个事务中

PROPAGATION_REQUIRED: B方法调用A方法,如果A中有事务,使用A中的事务并将B中的操作包含到该事务中;否则新建一个事务,将A和B中的操作包含进来。(默认)
PROPAGATION_SUPPORTS:如果A中有事务,使用A的事务;否则不使用事务
PROPAGATION_MANDATORY:如果A中有事务,使用A的事务;否则抛出异常

保证多个操作不在同一个事务中

PROPAGATION_REQUIRES_NEW:如果A中有事务,将其挂起,创建新事务,只包含自身操作。否则,新建一个事务,只包含自身操作。
PROPAGATION_NOT_SUPPORTED:如果A中有事务,挂起,不使用事务。
PROPAGATION_NEVER:如果A中有事务,抛出异常,也即不能用事务运行。

嵌套事务

PROPAGATION_NESTED:如果A有事务,按照A的事务执行,执行完成后,设置一个保存点,然后执行B的操作。如果出现异常,可以回滚到最初状态或保存点状态。

未完带续

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值