spring事物注意事项

------------------------------------------------
1.spring默认对于runtimeException进行回滚,对于Exception不回滚,若以要对Exception进行回滚,则要使用rollbackFor=异常.class
事物传播行为
2. 一旦对类作用事物,则通过某方法上设置propagation=Propagation.NOT_SUPPORTED来表明不实用事物。
3. 默认情况下是Propagation.REQUIRED,表示若是存在事物,则使用该事物,若是不存在,则自己为该方法创建一个事物。开发中80%都是使用该事物。
4.Propagation.NOT_SUPPORTED,如果这个方法没有事物,则容器不会为该方法创建事物。如果一个已经存在事物的方法调用标注了NOT_SUPPORTED的方法,则执行到
该方法时会先挂起事物,等到执行完后再恢复事物。
5.Propagation.REQUIREDNEW,不管被调用的方法中是否存在事物,执行到自己时都会挂起方法中的事物,然后为自己开启一个事物。等运行完毕后再回复。
6.Propagation.MANDATORY,表示该方法必须在一个已经存在事物的方法中运行。
7.Propagation.SUPPORT,表示如果一个方法在一个事物的方法中运行,则该方法也会在该事物中运行,成为该事物的一部分,如果该方法在一个不存在事物的方法中运行
则该方法也在不存在事物的方法中运行。
8.Never表示不在事物中运行。
9.NESTED用于嵌套事物的使用,当在一个已经存在事物的方法中运行标注了NESTED的方法,就会形成嵌套的事物。
首先开启一个事物,然后在执行NESTED时,设置一个保存点,然后创建一个新的statement执行NESTED方法,如果出现异常则标注NESTED的方法回滚到保存点
,接着执行外部的事物,如果外部的事物出现回滚则标注NESTED的事物也会回滚。
readonly:事物的除了设置传播行为,还可以设置是否只读,设置为只读的事物就不能进行更新操作了,效率会更高。
事物的传播行为是由spring实现的。
但是事物的隔离性不是由spring来实现的。而是由数据库来实现的。
isolation:4种
ReadUncommited 读取未提交数据(会出现脏读,不可重复读,幻读)
ReadCommited 读取已提交数据(会出现不可重复读,幻读)
Repeatable 可重复读(出现幻读)
Serializable 串行化
通过不同的锁来实现上面的隔离级别。
不同数据库默认的隔离级别是不同的。mysql默认是Repeatable

脏读:一个事物读取另一个事物为提交的数据。一个事物做了更新但是未提交。另一个事物读取,之后更新的额事物做了回滚,就会出现这个问题。
不可重复读:即在一个事物中两次读取同一数据,返回的结果是不同的,为了实现可重复读取,一般数据库采取的是快照的技术。第一次读取时记录,之后在统一事物中读取时都是读取记录的。
幻读:一个事物读取到另一个事物的insert语句。

一般使用可重复读的隔离级别。
一般采取数据库默认的隔离级别。

使用spring事物有两种方式,一种是使用注解的,需要打开spring注解配置。然后通过在类中注解进行配置。
另一种是基于xml,则需要利用aop。配置切点和通知。
如果只是配置spring数据源,拿到txManager,类是不受spring管理的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值