事务的传播机制

Spring事务机制主要包括声明式事务和编程式事务,此处侧重讲解声明式事务。

Spring声明式事务让我们从复杂的事务处理中得到解脱。使得我们再也无需要去处理获得连接、关闭连接、事务提交和回滚等这些操作。再也无需要我们在与事务相关的方法中处理大量的try…catch…finally代码。我们在使用Spring声明式事务时,有一个非常重要的概念就是事务属性。事务属性通常由事务的传播行为,事务的隔离级别,事务的超时值和事务只读标志组成。我们在进行事务划分时,需要进行事务定义,也就是配置事务的属性。

业务方法A可能调用业务方法B,这两个都使用了隔离级别,那么B事务的隔离机制以谁为准呢?
三种最常用的传播机制常量:
(A调用B,那么A被叫做B的当前事务或者交B的外部事务)

  1. REQUIRED:支持当前事务(外部事务),如果不存在外部事务,则创建新事务(事务B)
  2. REQUIRES_NEW:创建新事物,暂停当前事务(外部事务)
  3. NESTED:如果存在当前事务,那么嵌套在事务中执行(独立的提交和回滚),否者就和REQUIRED一样。

完整解释:

  • propagation_requierd:如果当前没有事务,就新建一个事务,如果已存在一个事务中,加入到这个事务中,这是最常见的选择。
  • propagation_supports:支持当前事务,如果没有当前事务,就以非事务方法执行。
  • propagation_mandatory:使用当前事务,如果没有当前事务,就抛出异常。
  • propagation_required_new:新建事务,如果当前存在事务,把当前事务挂起。
  • propagation_not_supported:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
  • propagation_never:以非事务方式执行操作,如果当前事务存在则抛出异常。
  • propagation_nested:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与propagation_required类似的操作
全部评论
三种常用传播机制那里有点绕呀,可不可以用以哪个事务的隔离机制为准来描述一下
点赞 回复 分享
发布于 2020-03-16 02:32
就是说在A方法调用B方法的时候,我们发现两个方法A和B是分属于不同的事务的,这两个事务的隔离级别不一样,比如A是读取已提交 B是可重复读。那么现在我们该使用什么隔离级别呢,事务变成啥样了呢。 REQUIRED:A属于一个事务,B就是变成了A的事务的一部分,按照A的事务参数来(隔离级别也是)。如果A不属于什么事务,那么我们就新整一个事务出来(事务参数按照默认值来)。 REQUIRES_NEW:不管A属不属于一个一个事务,到B了我都创建一个新的事务跑,A事务也先停了。我B跑完了,你A再继续跑。 NESTED:A属于一个事务,那么B加入A(但是和REQUIRE不一样的是,B有独立的提交和回滚,是A的子事务)。如果A不属于一个事务,那么就和REQUIRED一样了。
点赞 回复 分享
发布于 2020-03-16 03:19

相关推荐

offer小狗:就这样上秋招??
点赞 评论 收藏
分享
今天 10:55
已编辑
大连理工大学 Java
点赞 评论 收藏
分享
评论
1
2
分享
牛客网
牛客企业服务