spring事务传播行为的思考
1.问题
@TransactionConfiguration(transactionManager = "txManager", defaultRollback = false)
public class ActivityPublishComposeTest extends BaseUnitTest { @Autowired
private ActivityPublishCompose activityPublishCompose; @Test
@Rollback
public void testPublishActivityScheme() {
long start = System.currentTimeMillis();
Map<String, Object> map = activityPublishCompose.publishActivityScheme(25661L, "H1916", "unit test publish");
System.out.println("cost:" + (System.currentTimeMillis()-start));
assertNotNull(map);
assertTrue(map.size() != 0);
}
}
@Transactional(rollbackFor = Exception.class)
public Map<String, Object> publishActivityScheme(Long activitySchemeId, String operator, String comment) {
ActivitySchemeDTO schemeDTO = activityPublishService.selectAllActivitySchemeEditData4Publish(activitySchemeId, false);
...
}
内层方法上的事务提交会影响外层方法上的事务Rollback吗?
2.思考与解决
从运行结果看,Rollback生效,是外层事务Rollback同时会影响内层事务的提交吗?查询关于spring事务的资料,发现这个问题不是内外层事务提交回滚的问题,而是spring事务传播行为的问题。在这里我们使用的是spring的默认传播行为,即Propagation.REQUIRED
@Transactional注解中定义了默认的传播行为,这个Propagation.REQUIRED会检查当前是否已经有事务了,没有才创建一个新事务,如果已经有事务了,就支持当前事务,所以说内外层是同一个事务,那么只有外层方法上的事务提交时,事务才会真正提交。

修改内层方法上事务的传播行为成Propagation.REQUIRES_NEW,运行测试用例,发现事务被提交,外层方法上的Rollback不起作用。由此可知Propagation.REQUIRES_NEW是新生成一个事务,外层事务提交不能影响它。
3.参考资料
http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt216
spring事务传播行为的思考的更多相关文章
- spring事务传播机制实例讲解
http://kingj.iteye.com/blog/1680350 spring事务传播机制实例讲解 博客分类: spring java历险 天温习spring的事务处理机制,总结 ...
- Spring事务传播机制
Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播,即协调已经有事务标识的方法之间的发生调用时的事务 ...
- Spring事务传播特性的浅析——事务方法嵌套调用的迷茫
Spring事务传播机制回顾 Spring事务一个被讹传很广说法是:一个事务方法不应该调用另一个事务方法,否则将产生两个事务.结果造成开发人员在设计事务方法时束手束脚,生怕一不小心就踩到地雷. 其实这 ...
- Spring事务传播机制和数据库隔离级别
Spring事务传播机制和数据库隔离级别 转载 2010年06月26日 10:52:00 标签: spring / 数据库 / exception / token / transactions / s ...
- spring 事务传播机制
spring 事务 传播机制 描述的 事务方法直接相互调用,父子事物开启,挂起,回滚 等的处理方式. 绿色的 那几个 我认为比较重要. 1 , @Transactional(propagation=P ...
- 事务、事务特性、事务隔离级别、spring事务传播特性
事务.事务特性.事务隔离级别.spring事务传播特性 1.什么是事务: 事务是程序中一系列严密的操作,所有操作执行必须成功完成,否则在每个操作所做的更改将会被撤销,这也是事务的原子性(要么成功, ...
- 什么是事务、事务特性、事务隔离级别、spring事务传播特性
1.什么是事务: 事务是程序中一系列严密的操作,所有操作执行必须成功完成,否则在每个操作所做的更改将会被撤销,这也是事务的原子性(要么成功,要么失败). 2.事务特性: 事务特性分为四个:原子性(At ...
- spring事务传播实现源码分析
转载. https://blog.csdn.net/qpfjalzm123/article/details/83717367 本文只是对spring事务传播实现的流程进行简单的分析,如有不对之处请指出 ...
- Spring事务传播属性介绍(二).mandatory、not_supported、never、supports
Required.Required_New传播属性分析传送门:https://www.cnblogs.com/lvbinbin2yujie/p/10259897.html Nested传播属性分析传送 ...
随机推荐
- 前端以及django零碎补充
前端 1. js的循环each 前端需要循环,可以借助each这个方法 var dic = {'key1':'value1','key2':'value2'}; ']; //each(变量, 方法) ...
- 设置 SQL*Plus 的运行环境
SQL*Plus 的运行环境是用来输入.执行 SQL*Plus 命令和显示返回结果的场所,设置合适的 SQL*Plus 运行环境,可以使 SQL*Plus 按照用户的要求运行和执行各种操作.set 命 ...
- Qt QListWidget
以下代码是 List Widget 添加数据项的代码,一般放在构造函数即可. /*********************添加数据项*********************/ QIcon icon1 ...
- Jmeter学习笔记(九)——响应断言
Jmeter中又一个元件叫断言,用于检查测试中得到的响应数据等是否符合预期.断言又13种,目前在使用过程中使用到的是响应断言. 有时候请求成功了并不代表测试通过,还要看影响返回的内容是否符合预期的结果 ...
- Spring Boot 笔记 (1) - Maven、基本配置、Profile的使用
一. Spring Boot 简介 开箱即用的一站式 Java EE 解决方案 Spring 技术栈的大整合 核心问题 暂时无法回答 Spring Boot 和 SOA 有什么区别? Spring B ...
- c# Stack 类
- Linux命令——du
参考:10 Useful du (Disk Usage) Commands to Find Disk Usage of Files and Directories 前言 du(Disk Usage), ...
- JAVA 的8种基本数据类型
整型 int 一般的数据 long 极大的数据 short 用于特定的场合,比如底层的文件处理或者需要控制占用存储单元空间量的大数组 byte 用于特定的场合,比如底层的文件处理或者需要控制占用存储单 ...
- 十分钟了解pandas
十分钟掌握Pandas(上)--来自官网API 一.numpy和pandas numpy是矩阵计算库,pandas是数据分析库,关于百度百科,有对pandas的介绍. pandas 是基于NumPy ...
- node ffmpeg 视频操作
1,先安装ffmpeg 2,设置环境变量 3,npm install fluent-ffmpeg 4,编码 var ffmpeg = require('fluent-ffmpeg'); //视频合并 ...