【原创】spring中的事务传播特性
关于spring的传播特性,我对其进行了详细的叙述了下:
PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
比如方法A调用方法B,如果方法A,B都使用该特性,那么A会开启事务,
执行到B的时候,B发现自己处于一个事务中,则会合并到该事务中和
A公用一个事务执行,弱任一异常会回滚整个事务,AB执行都失败。 若A未开启事务且未使用该特性,B使用该特性,B发现未处于一
个事务中,则会主动开启事务,只有B会使用事务,A不会。
PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
方法AB,A调用B,A使用REQUIRED,会开启事务,B,使用SUPPORTS,则B会加入A的事务,若A未使用事务,则B也不使用事务。
PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
方法AB,A【REQUIRED】调用B【SUPPORTS】,A如果有事务,则B会加入事务,若A没有事务,B会报错,B必须加入一个显示存在的事务,自己不能开启事务。
PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
方法AB,A【REQUIRES_NEW】调用B【REQUIRES_NEW】,那么执行到B时,A事务会挂起,B会开启一个新的事务。A和B处于完全不同的两个事务之中。
PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
方法AB,A【REQUIRED】调用B【NOT_SUPPORTED】,B会挂起A事务,然后B不使用事务执行,也就是和A异步错开执行。
PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。
不允许在事务内执行,否则抛出异常。
PROPAGATION_NESTED--如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。
A调用B,A【REQUIRED】调用B【NESTED】,此时B会作为嵌套事务开始执行,所谓嵌套事务,实际上就是加入A的事务和A使用一个事务,只是使用savepoint,如果B执行失败,会回滚到savepoint,然后A根据配置决定是回滚还是继续执行,这样就产生分支执行的情况。如B失败回滚,A可以在异常处理catch中继续未完成的操作。
1.要设置 transactionManager 的 nestedTransactionAllowed 属性为 true。
2.
【原创】spring中的事务传播特性的更多相关文章
- 在Spring的事务体系中,事务传播特性:Required和RequiresNew有何不同?
Required 如果当前存在一个事务,则加入当前事务.如果不存在任何事务,则创建一个新的事务.总之,要至少保证在一个事务中运行.PROPAGATION_REQUIRED通常作为默认的事务传播行为.p ...
- 面试官:说说Spring中的事务传播行为
前言 在开发中,相信大家都使用过Spring的事务管理功能.那么,你是否有了解过,Spring的事务传播行为呢? Spring中,有7种类型的事务传播行为.事务传播行为是Spring框架提供的一种事务 ...
- Spring中的事务传播行为
Spring在TransactionDefinition接口中定义了7种类型的事务传播行为,它们规定了事务方法是怎样传播的. PROPAGATION_REQUIRED(最经常使用!):支持当前事务,假 ...
- spring中的事务传播机制
1.事务的实现思想 在spring中要想某个方法具有事务,只要在方法前加一个@Transactional注解.然后spring就会利用aop思想,在这个方法执行前开启事务, 在方法执行后选择提交事务或 ...
- Spring中的事务传播行为与隔离级别
事务传播行为 事务传播行为(为了解决业务层方法之间互相调用的事务问题): 当事务方法被另一个事务方法调用时,必须指定事务应该如何传播.例如:方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己 ...
- Spring事务传播特性的浅析——事务方法嵌套调用的迷茫
Spring事务传播机制回顾 Spring事务一个被讹传很广说法是:一个事务方法不应该调用另一个事务方法,否则将产生两个事务.结果造成开发人员在设计事务方法时束手束脚,生怕一不小心就踩到地雷. 其实这 ...
- 什么是事务?事务特性?事务隔离级别?spring事务传播特性?
一.事务的概述 什么是事务? 在数据库中,所谓事务是指一组逻辑操作单元即一组sql语句,当这个单元中的一部分操作失败,整个事务回滚,只有全部正确才完成提交.判断事务是否配置成功的关键点在于出现异常时事 ...
- 事务、事务特性、事务隔离级别、spring事务传播特性
事务.事务特性.事务隔离级别.spring事务传播特性 1.什么是事务: 事务是程序中一系列严密的操作,所有操作执行必须成功完成,否则在每个操作所做的更改将会被撤销,这也是事务的原子性(要么成功, ...
- 什么是事务、事务特性、事务隔离级别、spring事务传播特性
1.什么是事务: 事务是程序中一系列严密的操作,所有操作执行必须成功完成,否则在每个操作所做的更改将会被撤销,这也是事务的原子性(要么成功,要么失败). 2.事务特性: 事务特性分为四个:原子性(At ...
随机推荐
- SpringMVC(五)@RequestHeader和@CookieValue
通过使用@RequestHeader获取请求头 通过使用@CookieValue获取cookie值 代码: 1: @Controller 2: public class TestHeader_Cook ...
- mac上安装flask详细步骤
1 在终端输入 macdeMac-mini-62:~ mac$ sudo easy_install pip 2 macdeMac-mini-62:~ mac$ sudo pip install fl ...
- [SCOI2008]奖励关_状压动归_数学期望
Code: #include<cstdio> #include<algorithm> using namespace std; const int maxn = 20; dou ...
- python海龟的使用
############################螺旋正方形############################### import turtle turtle.left(90)for i ...
- 2104 -- K-th Number
Description You are working for Macrohard company in data structures department. After failing your ...
- -1 深度学习基础caffe
一.反思 二.反向传播 三.ubuntu安装caffe 四.追踪关键词
- BZOJ 3774 最优选择 (最小割+二分图)
题面传送门 题目大意:给你一个网格图,每个格子都有$a_{ij}$的代价和$b_{ij}$的回报,对于格子$ij$,想获得$b_{ij}$的回报,要么付出$a_{ij}$的代价,要么$ij$周围四联通 ...
- BZOJ 1901 Dynamic Rankings (整体二分+树状数组)
题目大意:略 洛谷传送门 这道题在洛谷上数据比较强 貌似这个题比较常见的写法是树状数组套主席树,动态修改 我写的是整体二分 一开始的序列全都视为插入 对于修改操作,把它拆分成插入和删除两个操作 像$C ...
- V$INSTANCE 字段说明
http://blog.csdn.net/wyzxg/article/details/4728622 http://blog.csdn.net/warden2010/article/details/6 ...
- 游戏开发人员眼中的Unity 3D网页游戏測评报告
眼下.能够实现3D页游的主流技术有Silverlight.XNA.Flash.HTML5和Unity3D. 当中.Unity3D作为一款专注于3D游戏的浏览器插件.最近在国内外页游产品线骚动异常:本人 ...