- 先实战后原理
- 7大传播机制
-
- MANDATORY
-
- 例子
- REQUIRED
-
- 例子
- SUPPORTS
-
- 例子
先实战后原理
事务这个东西一开始理解起来比较复杂,所以我打断先讲下实战例子,有个概念,然后我们带着问题去看源码,期间我也会画图来辅助理解,尽可能把7大传播机制都讲透,这样对事物的使用就得心应手了。
7大传播机制
其实可以分成3
个支持当前事务,3
个不支持当前事务,1
个嵌套事务。什么是当前事务呢,你可以理解为A
方法调用B
方法,A
有事务,那对于B
来说,A
的事务就是当前事务。
大致的传播机制就是这样:
MANDATORY
使用当前事务,当前如果没事务就报异常。
例子
直接抛出异常:
org.springframework.transaction.IllegalTransactionStateException: No existing transaction found for transaction marked with propagation 'mandatory'
REQUIRED
这个是属于默认的机制,其实就是用同一个连接,不管什么地方出现异常,都是要回滚的。
注解默认是这个设置:
例子
结果是回滚了,没插入进去,不管这个异常放在哪个方法里,都不会成功。
异常放外层,也是失败的,其实内部用的是同一个连接。
内部方法出了异常只是做了要回滚的标记,直到最外面的当前事务才会去真正的处理回滚,具体后面源码会分析。
SUPPORTS
使用当前事务,当前如果没事务就不管了。
例子
外层没事务的情况就不管了,内部抛异常也不管,所以user
会插入成功,account
不会。
结果:
其他的机制下一篇说吧。
好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。