spring 事务

1.什么是事务

(1)事务是数据库操作最基本的单元,逻辑上的一组操作,要么都成功,如果有一个失败所有操作都失败

(2)典型场景:微信转账

小明转账100块给小光

小明少100块,小光多100块

2.事务的四个特性(ACID)

(1) 原子性 (要么都成功,一个失败所有操作全失败)

(2) 一致性 (小明和小光钱的总和不变,转账之前他们俩总和没有变转账之后他们俩的总和也没有变)

(3) 隔离性 (多事务操作同一条记录 它们之间不会产生影响的)

(4) 持久性(事务提交之后,表中数据真正发生了变化)

3.spring事务的两种方式

编程式事务:通过try catch方式捕捉异常作事务的回滚。

声明式事务:通过配置文件的方式或注解的方式

4.注解声明式事务管理器 @Transactional这个注解可以放在类上也可以放在方法上面

5.@Transactional的属性

(1)Propagation 事务的传播行为

REQUIRED :如果有事务在运行,当前的方法就在事务内运行,否则,就启动一个新的事务,并在自己的事务内运行

举例:方法A 如果当前没有事务则开启一个新的事务 方法A在新的事务中运行;

           如果有方法B 在事务B中正运行 则方法A开启事物A并且调用方法B加入到事物A中

总结:事务B会受到事务A的影响。

REQUIRED_NEW:当前的方法必须启动新事物,并在它自己的事物内运行。如果有事物正在运行,应该将它挂起

举例:方法A 事物A ;方法B 事物B

方法A 开启事务A 调用 方法B,方法B开启事务B

事务A中包含事务B

但是他们互不影响 假如事务A执行的时候遇到了异常事务A会回滚,但是事务B将继续运行下去不会受到事务A的影响,事务B不会回滚

SUPPORTS:如果有事务在运行,当前的方法就在这个事务内运行,否则它可以不运行在事务中

举例:方法A 事务A 比如传播行为是REQUIRED ;方法B 事务B比如传播行为是SUPPORTS

方法B没有开启事务也是可以运行传播的

方法A 调用方法B时,方法B会加入到事务A中运行

(2)ioslation 事务的隔离级别 

事务有特性称为隔离性,有这个特性的存在,多事务操作之间不会产生影响。

不考虑隔离性会产生 脏读、不可重复度、虚(幻)读 三个读的问题

脏读:一个未提交的事务读取到另一个未提交事务的数据

举例:小明开启事务A读取到 一条金额为5000的数据;

小光开启事务B也读取到 一条金额为5000的数据;

小光把5000改成了6000没有提交事务B,小明读取到小光修改的6000的数据,对6000的数据进行操作,这时小光把6000作了回滚又变成了5000 ,这个时候小明读到的数据就又变成了5000 那数据就不准确了

不可重复读:一个未提交的事务读取到另一个提交的事务修改数据

举例:小明 开启事务A 读到数据是5000

          小光 开启事务B读到的数据也是5000

小光把5000改成6000 并提交了事务B,小明读到的数据变成了6000

小明开启的事务A并没有提交 理论上讲读取到的数据是5000,因为不可重复读的现象发生读取到了6000

这样如果每次读到的数据都不一样,数据就不准确了

虚读:一个未提交事务读取到另一个已提交事务添加数据

举例:小明 开启事务A ;小光开启事务B

小光添加数据提交事务B,小明读到了小光添加的数据

总结:脏读是一个致命问题,但是不可重复读的是一种现象

ioslation 事务的隔离级解决三读问题

READ UNCOMMITTED(读未提交)  脏读、不可重复读、幻读都不能解决

READ COMMITTED(读已提交)        解决脏读      没有解决 不可重复读、幻读

REPEATABLE READ(可重复读)       解决脏读、不可重复读     没有解决幻读

SERIALIZABLE(串行化)                    脏读、不可重复读、幻读都可以解决  

(3)timeout:超时时间

事务需要在一定时间内进行提交,如果不提交进行回滚

默认值时-1没有超时时间  若设置时间以秒为单位进行计算

(4) readOnly:是否只读

默认是false 表示可以读写的操作

为true时只能进行查

个人觉的这个属性没什么用,开启事务一般是针对往数据库写的操作

(5) rollbackFor:回滚

设置那些异常进行事务回滚

属性值是异常类名

(6)noRollbackFor:不回滚

设置出现哪些异常不进行事务回滚

属性值是异常类名

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值