spring事务的七种传播机制

spring事务传播机制定义了多个事务方法相互调用时,事务是如何在这些方法之间进行传播的,也就是这多个事务是如何执行的。 (比如方法A调用方法B,通过方法B定义的事务传播机制,判断方法A当前是否有事务而决定之后的事务操作),spring传播机制共有七种如下:

REQUIRED:A有事务,则加入A的事务;方法A没有事务,方法B则新建一个事务,默认的传播特性

SUPPORTS:A有事务,则加入A的事务;方法A没有事务,方法B则以非事务方式执行

MANDATORY:A有事务,则加入A的事务;A方法没有事务,则B方法抛出异常。

REQUIRES_NEW:不管A有没有事务,B方法都新建一个自己的事务。

NOT_SUPPORTED:B方法以非事务方式运行。如果A存在事务,则A的当前事务挂起

NEVER:B以非事务方式运行;如果A存在事务,则B抛出异常

NESTED:A有事务,则B事务嵌套在A的事务中运行;如果A方法没有事务,则B方法自己新建一个事务。

我的理解是,除了NESTED外,从上到下的事务顺序,就是一个是否支持事务的 “度” 的逐步变化


Propagation枚举类部分源码引用如下,注解部分有精简和自己加入的翻译:



    /**
	 * Support a current transaction, create a new one if none exists.
	 * <p>This is the default setting of a transaction annotation.
	 * 拥护(即加入)当前事务,如果不存在则创建一个新事物。
	 * 事务注解的默认配置
	 */
	REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED),

	/**
	 * Support a current transaction, execute non-transactionally if none exists.
	 * 拥护(即加入)当前事务,如果不存在则以非事务方式执行。
	 */
	SUPPORTS(TransactionDefinition.PROPAGATION_SUPPORTS),

	/**
	 * Support a current transaction, throw an exception if none exists.
	 * 拥护(即加入)当前事务,如果不存在则抛出异常
	 */
	MANDATORY(TransactionDefinition.PROPAGATION_MANDATORY),

	/**
	 * Create a new transaction, and suspend the current transaction if one exists.
	 * 创建一个新事务,如果存在当前事务,则暂停当前事务
	 */
	REQUIRES_NEW(TransactionDefinition.PROPAGATION_REQUIRES_NEW),

	/**
	 * Execute non-transactionally, suspend the current transaction if one exists.
	 * 以非事务方式执行,如果存在当前事务,则暂停当前事务。
	 */
	NOT_SUPPORTED(TransactionDefinition.PROPAGATION_NOT_SUPPORTED),

	/**
	 * Execute non-transactionally, throw an exception if a transaction exists.
	 * 以非事务方式执行,如果存在事务则抛出异常。
	 */
	NEVER(TransactionDefinition.PROPAGATION_NEVER),

	/**
	 * Execute within a nested transaction if a current transaction exists,
	 * behave like PROPAGATION_REQUIRED else
	 * 如果当前事务存在,则在嵌套事务中执行,否则行为像 REQUIRED 那样(创建一个新事物)
	 */
	NESTED(TransactionDefinition.PROPAGATION_NESTED);



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值