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的控制之下 提交或回滚。

经验分享 程序员 微信小程序 职场和发展