spring的事务自己再理解的,required,new,nested

先假设A是大方法,B是小方法

required,A没有事务时调用B方法(B的事务隔离级别是required),B就会开启自己单独的事务,B要回滚的话,也是回滚B。A有事务时,B就加入到A这个事务(B不开启自己的事务了),这里发生回滚的话,AB的事务就都被回滚了。

new , A没有事务时调用B方法(B的事务隔离级别是new),B就会开启自己单独的事务,B要回滚的话,也是回滚B。A有事务时,B还是会开启自己的事务,B事务发生回滚时,AB事务都会一起回滚,但是当执行了B事务时,A事务时挂起的,当执行完B事务且commit成功后,B事务结束,A事务恢复,若此时A事务发生回滚,那只是A事务回滚,不影响B事务的提交了。

nested,A没有事务调用B方法时(B的事务隔离级别是new),此时就相当于是required了。A有事务时,B事务也开启,但B事务此时是相当于A事务的嵌套子事务(不是太懂,意思是执行B时A不挂起??),B事务发生回滚时,会回到B事务开启执行时的savepoint(保存点),此时B事务已经结束了,然后继续从B事务开始时的保存点开始,继续A事务。如果期间B事务没回滚,那B事务的提交也是要和A事务一起提交,而且此时B事务没回滚执行完之后,但A事务出现回滚,AB事务就没法提交,那就都回滚了(这就是嵌套子事务的概念吧?)

猜你喜欢

转载自blog.csdn.net/f45056231p/article/details/83510291