【Spring】事务的传播特性

概念

事务传播行为就是多个事务方法相互调用时,事务如何在这些方法间传播

 

分类

  1. PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务。如果没有事务则开启

  2. PROPAGATION_SUPPORTS: 如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行

  3. PROPAGATION_MANDATORY: 如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常

  4. PROPAGATION_REQUIRES_NEW: 总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起

  5. PROPAGATION_NOT_SUPPORTED: 总是非事务地执行,并挂起任何存在的事务

  6. PROPAGATION_NEVER: 总是非事务地执行,如果存在一个活动事务,则抛出异常

  7. PROPAGATION_NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务, 则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行

 

说明

前提:先调用ServiceA.methodA(存在有无事务两种情况),再调用ServiceB.methodB(B的事务分别如下)

1.Required

ServiceA.methodA 没有事务,ServiceB.methodB 就用 ServiceB.methodB 的事务
ServiceA.methodA 有事务,ServiceB.methodB 就直接用 ServiceA.methodA 的事务

Ps. 如名,要求有个事务,没有则开启,有则用,如果报错一起回滚


2.Supports

ServiceA.methodA 没有事务,ServiceB.methodB 也就没有事务了
ServiceA.methodA 有事务,ServiceB.methodB 就用 ServiceA.methodA 的事务

Ps. 如名,支持你的事务,你有则用你的,没有那也就没有


3.Mandatory

ServiceA.methodA 没有事务,ServiceB.methodB 就报错
ServiceA.methodA 没有事务,ServiceB.methodB 就用 ServiceA.methodA 的事务

Ps. 如名,获得命令后强制执行这个事务,没获得就报错,获得了就执行


4.Requires_New

ServiceA.methodA 没有事务,ServiceB.methodB 就用 ServiceB.methodB 的事务
ServiceA.methodA 有事务,ServiceB.methodB 还是用 ServiceB.methodB 的事务

Ps. 如名,要求新的事务,不管你有没有,我都被要求开启一个新事务


5.Not_Supported

ServiceA.methodA 没有事务,ServiceB.methodB 没有事务
ServiceA.methodA 有事务,ServiceB.methodB 也没有事务

Ps. 如名,不支持你的事务,你有没有我都不用


6.Never

ServiceA.methodA 没有事务,ServiceB.methodB 没有事务
ServiceA.methodA 有事务,ServiceB.methodB 就报错

Ps. 如名,永不有事务,没有还好,有就报错


7.Nested

ServiceA.methodA 没有事务,ServiceB.methodB 用 ServiceB.methodB 的事务
ServiceA.methodA 有事务,ServiceB.methodB 的事务等着和A一起提交

Ps. 如名,嵌套在你里面,和你一起提交

 

小结

事务的特性是Spring借助底层资源的功能来完成的,但是事务的传播行为是Spring通过自身的框架提供的功能

关于Spring事务传播的行为模式就如上几种,可以在不同的情境下采用不同的事务

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 58
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 58
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值