spring事务的传播机制与事务挂起

·事务的传播机制:(不是JDBC事务管理)用来解决业务层的事务之间调用的问题。

          PROPAGATION_REQUIRED     :支持(使用)当前事务,如果不存在事务就创建一个新事务

                 *方法A中调用方法B:  如果方法A有事务,B方法就使用方法A的事务。如果A没有事务,就创建一个新事务。A,B在同一个事务中)

          PROPAGATION_SUPPORTS    :支持(使用)当前事务,如果不存在事务就不使用事务

          PROPAGATION_MANDATORY     :支持(使用)当前事务,如果不存在就抛出异常

          PROPAGATION_REQUIRES_NEW     :如果有事务存在,则挂起当前事务,创建一个新事务。(不在同一事务

          PROPAGATION_NOT_SUPPORTED     :已非事务的方式运行,如果有事务存在,则挂起当前事务。

          PROPAGATION_NEVER     :已非事务的方式运行,如果有事务存在,则抛出异常。

          PROPAGATION_NESTED     : 如果当前事务存在,则嵌套事务执行

                         *基于savePoint(保存点)技术

                         *方法A.B: A有事务,A执行之后,将A事务执行之后的内容保存到savePoint,如果B事务出现异常的话,用户需要自己设置提交事务还是回滚。

      常用的:

                PROPAGATION_REQUIRED 

                PROPAGATION_REQUIRES_NEW

                PROPAGATION_NESTED

·关于事务挂起的举例:(某事务挂起之后,任何操作都不在该事务的控制之下)

例如: 方法A支持事务,方法B不支持事务。    即PROPAGATION_NOT_SUPPORTED

方法A调用方法B。
在方法A开始运行时,系统为它建立Transaction,方法A中对于数据库的处理操作,会在该Transaction的控制之下。
这时,方法A调用方法B,方法A打开的 Transaction将挂起,方法B中任何数据库操作,都不在该Transaction的管理之下。
当方法B返回,方法A继续运行,之前的Transaction回复,后面的数据库操作继续在该Transaction的控制之下 提交或回滚。

猜你喜欢

转载自blog.csdn.net/xiaoshuo566/article/details/83929465
今日推荐