spring--事务--02--事务参数设置

一、事务传播

  • 事务传播行为是Spring框架独有的事务增强特性,他不属于的事务实际提供方数据库行为
  • 传播属性是描述:同一线程中,事务嵌套时,事务如何管理

spring的事务传播级别有七种,分为三类:

1.1 必须要在事务里运行的

事务级别解释
REQUIRED如果当前存在事务,加入当前事务,否则创建新的。(spring默认)
REQUIRES_NEW如果当前存在事务,则挂起他,开启新的事物执行,新事务提交后再执行挂起的事务
MANDATORY如果当前存在事务,加入当前事务,否则报错
NESTED如果当前存在事务,使用嵌套事物执行,否则开启新事务

1.2 必须以非事务运行的

事务级别解释
NOT_SUPPORTED以非事务方式执行,如果当前存在事务,则挂起他
NEVER以非事务方式执行,如果当前存在事务,则报错

1.3 有没有事物都可以运行的

事务级别解释
SUPPORTS当前存在事务就加入,没有就已非事务方式执行

1.4 事务传播使用举例

参考:Spring事务传播行为详解

二、事务隔离

多事务之间操作同一数据(即并发操作同一数据),相互隔离互不影响。如果不考虑隔离性,会产生脏读、不可重复读、虚(幻)读这三个读问题。

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

2.1 事务隔离级别

通过设置事务隔离级别,可解决读的3个问题。

(1)隔离级别如下图所示:

(2)数据库对于隔离属性的支持

Oracle不支持REPEATABLE_READ值如何解决?
          Oracle采用多版本对比方式,解决不可重复读的问题

(3)默认隔离属性


spring中隔离属性默认值ISOLATION_DEFAULT,是指使用不同数据库所设置的默认隔离属性。


MySQL : REPEATABLE_READ
Oracle: READ_COMMITTED

(4)查看数据库默认隔离属性

 

三、timeout:超时时间


(1)事务需要在一定时间内进行提交,如果不提交进行回滚
(2)默认值是-1 ,表示不设置,采用对应数据库的值。设置时间以秒为单位进行计算


四、readOnly:是否只读


(1)读:查询操作,写:添加修改删除操作
(2)readOnly默认值false,表示可以查询,可以添加修改删除操作
(3)设置readOnly值是true,表示只能查询

 

五、rollbackFor:回滚


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

 

六、noRollbackFor:不回滚


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

(1)Spring事务处理过程中:

  • 默认对于RuntimeException及其子类采用的是回滚的策略
  • 默认对于Exception及其子类采用的是提交的策略

用人话讲,就是:对try--catch处理了的异常,采用提交策略,未处理抛出去的异常,进行回滚

(2)rollbackFor使用方式--多个异常中间用逗号隔开

rollbackFor = {java.lang.Exception,xxx,xxx}

noRollbackFor = {java.lang.RuntimeException,xxx,xx}

(3)示例

@Transactional(rollbackFor = {java.lang.Exception.class},noRollbackFor= {java.lang.RuntimeException.class})

  • Exception :受检查的异常,这种异常是强制我们catch或throw的异常。你遇到这种异常必须进行catch或throw,如果不处理,编译器会报错。比如:IOException。
  • RuntimeException:运行时异常,这种异常我们不需要处理,完全由虚拟机接管。比如我们常见的NullPointerException,我们在写程序时不会进行catch或throw。
  • RuntimeException也是继承自Exception的,只是虚拟机对这两种异常进行了区分

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值