spring中的事务传播机制
1、事务的实现思想
在spring中要想某个方法具有事务,只要在方法前加一个@Transactional注解。然后spring就会利用aop思想,在这个方法执行前开启事务,
在方法执行后选择提交事务或者回滚事务。
2、7种事务传播机制
1 @Transactional(propagation = Propagation.REQUIRED)
2 public void A(){
3 //doSomething
B();
//doSomething
4 }
5
6 @Transactional(propagation = ?)
7 public void B(){
8 //doSomething
9 }
1、REQUIRED:
spring默认事务,如果当前没有事务就创建一个事务,如果当前有事务就当入该事务。如果此时B设置为REQUIRED,A调用B后B中的代码会加入A中的事务,一起回滚或提交。
2、SUPPORTS:
有事务就按有事务执行,没有事务就以非事务方式执行。如果此时B设置为SUPPORTS,单独调用B会以非事务的方式执行,A调用B是,B中的代码会加入A中的事务。
3、MANDATORY:
必须要有事务,如果没有事务就会报错。如果B设置为MANDATORY,单独调用B会报错,A调用B时,B中的代码会加入A中的事务,一起回滚或提交。
4:REQUIRES_NEW:
不管有没有事务都会创建一个新的事务。如果B设置为REQUIRES_NEW,单独调用B会创建事务,A调用B时,B也会创建一个新事务t2,A事务t1和t2互不影响,各自提交回滚自己的事务。
5、NOT_SUPPORTED:
不支持事务,如果有事务就会把事务挂起。如果B设置为NOT_SUPPORTED,单独调用B没有事务,A调用B时,运行到B中代码时,会把事务挂去。
6、NEVER:
不支持事务,如果有事务就会报错。如果B设置为NEVER,单独调用B没有事务,A调用B时会报错。
7、NESTED:
嵌套事务,当前有事务时就嵌套执行事务,当前没有事务时就按REQUIRED属性执行。如果B设置为NESTED,单独调用B会创建一个事务。A调用B时,B会创建一个回滚点,B中代码
抛出异常时会回滚到这个回滚点,A中的代码可以继续往下执行,但是A中代码出异常后会连带着B一起回滚。
spring中的事务传播机制的更多相关文章
- Spring中的事务传播行为
Spring在TransactionDefinition接口中定义了7种类型的事务传播行为,它们规定了事务方法是怎样传播的. PROPAGATION_REQUIRED(最经常使用!):支持当前事务,假 ...
- 面试官:说说Spring中的事务传播行为
前言 在开发中,相信大家都使用过Spring的事务管理功能.那么,你是否有了解过,Spring的事务传播行为呢? Spring中,有7种类型的事务传播行为.事务传播行为是Spring框架提供的一种事务 ...
- Spring中的事务传播行为与隔离级别
事务传播行为 事务传播行为(为了解决业务层方法之间互相调用的事务问题): 当事务方法被另一个事务方法调用时,必须指定事务应该如何传播.例如:方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己 ...
- 【原创】spring中的事务传播特性
关于spring的传播特性,我对其进行了详细的叙述了下: PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务.这是最常见的选择. 比如方法A调用方法B,如果方法 ...
- -手写Spring注解版本&事务传播行为
视频参考C:\Users\Administrator\Desktop\蚂蚁3期\[www.zxit8.com] 0018-(每特教育&每特学院&蚂蚁课堂)-3期-源码分析-手写Spri ...
- spring事务传播机制实例讲解
http://kingj.iteye.com/blog/1680350 spring事务传播机制实例讲解 博客分类: spring java历险 天温习spring的事务处理机制,总结 ...
- Spring事务传播机制
Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播,即协调已经有事务标识的方法之间的发生调用时的事务 ...
- Spring事务传播机制和数据库隔离级别
Spring事务传播机制和数据库隔离级别 转载 2010年06月26日 10:52:00 标签: spring / 数据库 / exception / token / transactions / s ...
- spring 事务传播机制
spring 事务 传播机制 描述的 事务方法直接相互调用,父子事物开启,挂起,回滚 等的处理方式. 绿色的 那几个 我认为比较重要. 1 , @Transactional(propagation=P ...
随机推荐
- Libevent库基础(1)
1.创建 eevent_base struct event_base *base = event_base_new(); 2.创建 事件event struct event *ev; struct e ...
- D. The Wu 解析(思維、二進位運算)
Codeforce 1017 D. The Wu 解析(思維.二進位運算) 今天我們來看看CF1017D 題目連結 題目 略,請直接看原題 前言 官方解答實在看不懂...之後還記得的話再補那個做法吧 ...
- 批量安装Zabbix_Agent
使用自动化部署工具Ansible批量部署zabbix_agent. 1. 安装Ansible yum –y install ansible 内网情况下,现在ansible及其依赖的rpm包,添加到yu ...
- python基础三:函数
def name(参数1,参数2,参数3,...) 可以自定义一些自己需要的函数来简化自己的工作. 如:自定义一个计算函数 def mycount(a,b,c): y=a+b-c return y ...
- 一起学Vue:路由(vue-router)
前言 学习vue-router就要先了解路由是什么?前端路由的实现原理?vue-router如何使用?等等这些问题,就是本篇要探讨的主要问题. vue-router是什么 路由是什么? 大概有两种说法 ...
- Java中的微信支付(3):API V3对微信服务器响应进行签名验证
1. 前言 牢记一句话:公钥加密,私钥解密:私钥加签,公钥验签. 微信支付V3版本前两篇分别讲了如何对请求做签名和如何获取并刷新微信平台公钥,本篇将继续展开如何对微信支付响应结果的验签. 2. 为什么 ...
- .NetCore中简单使用EasyNetQ
前言 我们在.Net中使用RabbitMQ,最原始的就是基于RabbitMQ.Client进行编码,在这个过程中我们需要通过代码约定和维护队列,Exchange等.如果是自行编码封装通用型的Rabbi ...
- 4、Python语法之变量
一 引入 我们学习Python语言是为了控制计算机.让计算机能够像人一样去工作,所以在Python这门语言中,所有语法存在的意义都是为了让计算机具备人的某一项技能,这句话是我们理解后续所有Python ...
- GROUP BY 分组后得到最新即时间最大的一条数据(需添加limit才可生效)
当使用GROUP BY 分组,默认返回的数据是组中最小的记录即id最小的数据, 当开发中经常会需要分组后将最新的数据放在前面, 为了实现需求,使用了嵌套查询,分别使用order by来排序 SELEC ...
- Sql 解析XML 解决方案参考
1.定义存储过程 -- =============================================-- Author: <Author,,Name>-- Create da ...