一.事务简单介绍
事务是⼀组操作的集合,是⼀个不可分割的操作.事务会把所有的操作作为⼀个整体,⼀起向数据库提交或者是撤销操作请求.所以这组操作要么同时成功,要么同时失败。
二.Spring中的事物
1.编程式事务(手动写代码操作事务)
2.声明式事务(利用注解自动开启和提交事务)
三.Transactional讲解
1.Transactional可以用来修饰方法或类:
修饰方法时:只有修饰public方法时才生效(修饰其他方法时不会报错,也不生效)修饰类时:对Transactional 修饰的类中所有的public方法都生效。方法/类被Transactional 注解修饰时,在目标方法执行开始之前,会自动开启事务,方法执行结束之后,自动提交事务.如果在方法执行过程中,出现异常,且异常未被捕获,就进行事务回滚操作。如果异常被程序捕获,方法就被认为是成功执行,依然会提交事务。
2.捕获了异常则不会回滚事务:
3.捕获了异常但是仍让抛出异常则事务进行回滚:
4.手动回滚事务
5. rollbackeFor
(1)默认事务发生运行时异常和error时才会回滚:
(2)使用rollbackFor来扩大回滚
四.隔离级别
1.隔离级别的简单叙述:
2.Transactional的隔离级别设置
-1:代表和数据库的隔离级别相同。
1:代表读未提交
2:代表读已提交
4:代表可重复度
8:代表序列化
使用:
五.Spring事务传播机制
1.Spring事务传播机制简单介绍
事务传播机制就是:多个事务方法存在调⽤关系时,事务是如何在这些方法间进行传播的。
2.事务传播机制的种类:
3.代码演示
(1)Propagation.REQUIRED(加入事务)
当UserService或者LogService其中一个以上出现异常时,事务进行回滚,则会把所有的事物进行回滚。
(4)Propagation.REQUIRES_NEW(新建事务)
(6)Propagation.NEVER(不支持当前事务,抛异常)
(7)NESTED(嵌套事务)
代码效果和REQUIRED相同。
4.NESTED和REQUIRED
(i)整个事务如果全部执⾏成功,⼆者的结果是⼀样的.
(ii)如果事务⼀部分执⾏成功,REQUIRED加⼊事务会导致整个事务全部回滚.NESTED嵌套事务可以实现局部回滚,不会影响上⼀个⽅法中执⾏的结果
详细资料可以看:https://dev.mysql.com/doc/refman/5.7/en/savepoint.html