Spring事务的传播机制

寵の児 提交于 2020-01-23 03:02:14

说起事务,就不得不谈谈事务的四大特性:

事务是一系列的操作,由一条或多条sql语句组成。是不可分割的整体,是最小的操作单位。
事务的特性:ACID
原子性(Atomicity):
    最小的执行单元。(要么全成功,有一条失败则回滚到最初状态)
一致性(Consistency):
    事务完成时所用的数据从一种一致性状态变为另一种一致性状态,所用的变更必须是在事务中进行修改,确保数据的完整性。
隔离性(Isolation):
    一个事务中的操作不能受其它事务的影响,多事务对数据的操作相互隔离,一个事务不能看到另一个事务 正在修改的数据。
持久性(Durability):
    事务执行完毕后,对数据的修改应持久保存在磁盘中。

当我们调用一个基于Spring的service层的方法时,它将运行于spring管理的事务当中,spring通过事务的传播行为控制当前事务如何传播到被嵌套调用的目标服务接口方法中。事务传播是spring进行事务管理的重要概念,本文进行分析不同事务传播行为的表现形式。

事务的传播行为类型(7种):传播行为即在两个业务之间如何共享事务

PROPAGATION_REQUIRED

required , 必须  【默认值】

支持当前事务,A如果有事务,B将使用该事务。

如果A没有事务,B将创建一个新的事务。

PROPAGATION_SUPPORTS

supports ,支持

支持当前事务,A如果有事务,B将使用该事务。

如果A没有事务,B将以非事务执行。

PROPAGATION_MANDATORY

mandatory ,强制

支持当前事务,A如果有事务,B将使用该事务。

如果A没有事务,B将抛异常。

PROPAGATION_REQUIRES_NEW 

requires_new ,必须新的

如果A有事务,将A的事务挂起,B创建一个新的事务

如果A没有事务,B创建一个新的事务

PROPAGATION_NOT_SUPPORTED

not_supported ,不支持

如果A有事务,将A的事务挂起,B将以非事务执行

如果A没有事务,B将以非事务执行

PROPAGATION_NEVER

never,从不

如果A有事务,B将抛异常

如果A没有事务,B将以非事务执行

PROPAGATION_NESTED

nested ,嵌套

A和B底层采用保存点机制,形成嵌套事务。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!