Required、Required_New传播属性分析传送门:https://www.cnblogs.com/lvbinbin2yujie/p/10259897.html

Nested传播属性分析传送门:https://www.cnblogs.com/lvbinbin2yujie/p/10260066.html

我的Spring事务传播属性介绍比较传送门:https://files.cnblogs.com/files/lvbinbin2yujie/Spring_Tx_Note.rar

事务传播属性三. PROPAGATION_MANDATORY

说明:  当前方法必须要在有事务方法中运行,不然就抛出异常;如果有事务,就加入当前事务。

      

查看运行结果验证:抛出异常

Exception in thread "main" org.springframework.transaction.IllegalTransactionStateException: No existing transaction found for transaction marked with propagation 'mandatory'

分析结果:serviceMADATORY方法没有被事务增强,调用serviceB的testService方法时,发现没有事务,但是MANDATORY属性强制要求有事务就会抛出异常;

所以在ServiceA的serviceMANDATORY方法上加上Transactional有事务的注解

查看输出结果: 可以看到没有报错,并且加入了当前全局事务;这种情况就和REQUIRED用法几乎相同.

事务传播属性四:PROPAGATION_NOT_SUPPORTED

说明: 当前方法不应该有事务,如果有事务存在,将它挂起,以无事务状态运行  (无事务,就是指底层的Connection对象的autoCommit、isolation等属性与数据库有关,与dataSource设置的属性有关,不会被Spring改变,下面会做个试验测试下.)

修改下ServiceA和ServiceB的测试代码:

    

查看输出日志: NOT_SUPPORTED可以看到将当前事务挂起,在无事务状态运行,并且在ServiceB方法中做的数据库操作不会随着全局事务回退而回退;

实验一:  修改下ServiceA和ServiceB

ServiceA修改后:

ServiceB修改后:

结合输出日志:  可以验证NOT_SUPPORTED确实没有事务运行

补充:DataSourceUtils的getConnection方法是事务同步的,如果你在ServiceB的方法中执行这样的方式获取连接,那ServiceB也会将这个Connection存入TransactionSynchronizationManager的resource线程局部变量上;

事务传播属性五. PROPAGATION_NEVER

说明: 当前方法不应该运行在事物中,如果有事务就抛出异常;

ServiceA.java

ServiceB.java  (验证是否有事务)

测试类方法:

查看日志输出:  同样获取了transaction,只不过这种情况下transaction对象都是null,也是没有事务的意思.

PROPAGATION_NEVER和PROPAGATION_NOT_SUPPORTED区别:

当进入PROPAGATION_NEVER事务的方法时,发现没有事务就正常运行,发现有事务存在,立刻抛出异常,该方法根本不会执行; 而PROPAGATION_NOT_SUPPORT只是将事务挂起,继续执行该方法;

NEVER发现事务存在时候抛出的异常情况类似如下:

Exception in thread "main" org.springframework.transaction.IllegalTransactionStateException: Existing transaction found for transaction marked with propagation 'never'

事务传播属性六:PROPAGATION_SUPPORTS

说明:  支持事务,你有事务,ok我加入你的全局事务,成为local transaction;你没有事务,那我还是可以一样运行; 这个就不举例子了.

事务传播属性七:PROPAGATION_NESTED

说明: 如果当前有事务在运行,就作为这个事务的内嵌事务运行;当前没有事务,就新建一个事物运行;

  附:NESTED事务见下一篇详细分析;

Spring事务传播属性介绍(二).mandatory、not_supported、never、supports的更多相关文章

  1. Spring事务传播属性介绍(一).required 和 reuqires_new

    Mandatory.Never.Not_Support传播属性分析传送门:https://www.cnblogs.com/lvbinbin2yujie/p/10260030.html Nested传播 ...

  2. Spring事务传播属性介绍(三).Nested

    Required.Required_New传播属性分析传送门:https://www.cnblogs.com/lvbinbin2yujie/p/10259897.html Mandatory.Neve ...

  3. spring事务传播机制实例讲解

    http://kingj.iteye.com/blog/1680350   spring事务传播机制实例讲解 博客分类:   spring java历险     天温习spring的事务处理机制,总结 ...

  4. spring 事务传播机制

    spring 事务 传播机制 描述的 事务方法直接相互调用,父子事物开启,挂起,回滚 等的处理方式. 绿色的 那几个 我认为比较重要. 1 , @Transactional(propagation=P ...

  5. spring 事务传播行为实例分析

    Spring事务传播行为: spring特有的事务传播行为,spring支持7种事务传播行为,确定客户端和被调用端的事务边界(说得通俗一点就是多个具有事务控制的service的相互调用时所形成的复杂的 ...

  6. 理解 spring 事务传播行为与数据隔离级别

    事务,是为了保障逻辑处理的原子性.一致性.隔离性.永久性. 通过事务控制,可以避免因为逻辑处理失败而导致产生脏数据等等一系列的问题. 事务有两个重要特性: 事务的传播行为 数据隔离级别 1.事务传播行 ...

  7. spring事务传播行为讲解转载

    https://segmentfault.com/a/1190000013341344 前言 Spring在TransactionDefinition接口中规定了7种类型的事务传播行为.事务传播行为是 ...

  8. spring事务传播属性和隔离级别

    猫咪咪的Java世界 spring事务传播属性和隔离级别 博客分类: Spring java编程   1 事务的传播属性(Propagation) 1) REQUIRED ,这个是默认的属性 Supp ...

  9. 阿里大牛带你深入分析spring事务传播行为

    spring框架封装了很多有用的功能和组件,便于在项目开发中快速高效的调用,其中spring的事务使用非常简单,只需要在用到事务的地方加一行注解即可: 1@Transactional 但越是看起来简单 ...

随机推荐

  1. 当有多个form表单请求时如何处理?

    问题:当有多个表单请求时如何处理?两种获取form表单 name属性值来区分是哪一个form表单.问题:如何获取name的值呢?<form name="myForm" met ...

  2. 前端开发 - JavaScript

    本节内容 一.如何编写 二.变量 三.数据类型 四.其他 五.语句与异常 六.函数 JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScri ...

  3. poj 1129 搜索

    Channel Allocation Time Limit: 1000 MS Memory Limit: 10000 KB 64-bit integer IO format: %I64d , %I64 ...

  4. [翻译]第二天 - Visual Studio 中的 .NET Core 模版一览

    原文: http://michaelcrump.net/part2-aspnetcore/ 免责声明:我不是 .NET Core 开发团队的一员,并且使用的是公开.可用的工具. 简介 该系列文章的完整 ...

  5. WPF实战案例-MVVM模式下在Xaml中弹出窗体

    相信很多学习和开发wpf项目的同学都了解过mvvm模式,同样,在mvvm模式下会有一个不可忽视的问题,就是怎么在xaml中弹出窗体,而不破坏MVVM本身的结构. 关于弹出窗体的方式还是很多的,本文先讲 ...

  6. winform自动升级方案

    未涉及过winform升级,研究一阵,大致出来个不成熟的方案. 我的解决方案(判断升级,升级程序下载安装包的压缩包,解压,自动安装,重新启动程序). 1.首先根据服务器中软件版本号和本地软件版本号是否 ...

  7. lost+found目录有啥用?

    Linux系统中根目录下或者新挂载的磁盘目录下有一个叫lost+found,它的作用是什么? 如果你运行fsck命令(文件系统检查和修复命令),它也许会找到一些数据碎片,这些文件碎片在硬盘中并没有引用 ...

  8. Color the ball(HDU1556)树状数组

    每次对区间内气球进行一次染色,求n次操作后后所有气球染色次数. 树状数组,上下区间更新都可以,差别不大. 1.对于[x,y]区间,对第x-1位减1,第y位加1,之后向上统计 #include<b ...

  9. es 修改拼音分词器源码实现汉字/拼音/简拼混合搜索时同音字不匹配

    [版权声明]:本文章由danvid发布于http://danvid.cnblogs.com/,如需转载或部分使用请注明出处 在业务中经常会用到拼音匹配查询,大家都会用到拼音分词器,但是拼音分词器匹配的 ...

  10. 【disruptor】2、disruptor中生产者线程与消费者之间的协调

    由于ringbuffer是一个环形的队列,那么生产者和消费者在遍历这个队列的时候,如何制衡呢? 1.生产快,消费慢,数据丢失? 生产者速度过快,导致一个对象还没消费完,就循环生产了一个新的对象要加入r ...