关于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中的事务传播特性的更多相关文章

  1. 在Spring的事务体系中,事务传播特性:Required和RequiresNew有何不同?

    Required 如果当前存在一个事务,则加入当前事务.如果不存在任何事务,则创建一个新的事务.总之,要至少保证在一个事务中运行.PROPAGATION_REQUIRED通常作为默认的事务传播行为.p ...

  2. 面试官:说说Spring中的事务传播行为

    前言 在开发中,相信大家都使用过Spring的事务管理功能.那么,你是否有了解过,Spring的事务传播行为呢? Spring中,有7种类型的事务传播行为.事务传播行为是Spring框架提供的一种事务 ...

  3. Spring中的事务传播行为

    Spring在TransactionDefinition接口中定义了7种类型的事务传播行为,它们规定了事务方法是怎样传播的. PROPAGATION_REQUIRED(最经常使用!):支持当前事务,假 ...

  4. spring中的事务传播机制

    1.事务的实现思想 在spring中要想某个方法具有事务,只要在方法前加一个@Transactional注解.然后spring就会利用aop思想,在这个方法执行前开启事务, 在方法执行后选择提交事务或 ...

  5. Spring中的事务传播行为与隔离级别

    事务传播行为 事务传播行为(为了解决业务层方法之间互相调用的事务问题): 当事务方法被另一个事务方法调用时,必须指定事务应该如何传播.例如:方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己 ...

  6. Spring事务传播特性的浅析——事务方法嵌套调用的迷茫

    Spring事务传播机制回顾 Spring事务一个被讹传很广说法是:一个事务方法不应该调用另一个事务方法,否则将产生两个事务.结果造成开发人员在设计事务方法时束手束脚,生怕一不小心就踩到地雷. 其实这 ...

  7. 什么是事务?事务特性?事务隔离级别?spring事务传播特性?

    一.事务的概述 什么是事务? 在数据库中,所谓事务是指一组逻辑操作单元即一组sql语句,当这个单元中的一部分操作失败,整个事务回滚,只有全部正确才完成提交.判断事务是否配置成功的关键点在于出现异常时事 ...

  8. 事务、事务特性、事务隔离级别、spring事务传播特性

    事务.事务特性.事务隔离级别.spring事务传播特性   1.什么是事务: 事务是程序中一系列严密的操作,所有操作执行必须成功完成,否则在每个操作所做的更改将会被撤销,这也是事务的原子性(要么成功, ...

  9. 什么是事务、事务特性、事务隔离级别、spring事务传播特性

    1.什么是事务: 事务是程序中一系列严密的操作,所有操作执行必须成功完成,否则在每个操作所做的更改将会被撤销,这也是事务的原子性(要么成功,要么失败). 2.事务特性: 事务特性分为四个:原子性(At ...

随机推荐

  1. Java并发-J.U.C之AQS

    AQS(Abstract Queue Synchronizer)介绍 [死磕Java并发]—–J.U.C之AQS(一篇就够了) 下面讲解具体的Java并发工具类 1 CountDownLatch 参考 ...

  2. Illegal instruction 问题的解决方法

    写的程序在一些arm板子上可以运行, 可在一些板子上出现 Illegal instruction 这个一般是 arm指令不匹配的问题. 在编译参数中, 加上  -march=armv4t  就可以解决 ...

  3. day02_20190106 基础数据类型 编码 运算符

    一.格式化输出 name = input('请输入姓名') age = input('请输入年龄') hobby = input('请输入爱好') job = input('请输入你的工作') # m ...

  4. vc++元文件的保存,保存图形,重绘图形

    1, CMateFileDC 可以用来多次打开自己的画布,这个元文件包含许多接口的命令 当绘制好之后可以用来播放元文件 首先,创建一个CMateFileDC的元文件对象 然后调用Create原函数,创 ...

  5. JS 封装一个求圆面积的函数 传值:半径

    y(6) var s = ""; function y (r){ s = Math.PI*r*r; alert(s); }

  6. 用shell编写一个三角形图案

    第一种方法 #!/bin/bash read -p "请输入层数: " n for (( i=1; i<=$n;i++ ))do   for (( j=n; j>=i; ...

  7. input标签处理多文件上传

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...

  8. Zepto.js 源码解析(emoji版)

    graph LR A($) --- B(function) A($) --- C(zepto) A($) --- D(fn) C(zepto) --- CA(init) C(zepto) --- CB ...

  9. 01.Python基础-2.判断语句和循环语句

    1判断语句 1.1判断语句介绍 满足条件才能做某件事 1.2 if语句 if 条件: 语句块 在if判断条件的时候 False:False, 0, '', None, [] True :基本除上面之外 ...

  10. Elasticsearch 入门 - 安装、启动和配置

    安装 请参阅elastic官网 :Installing Elasticsearch 启动 使用 ./bin/elasticsearch 命令即可启动 使用 ./bin/elasticsearch -d ...