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事务传播行为的思考的更多相关文章

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

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

  2. Spring事务传播机制

    Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播,即协调已经有事务标识的方法之间的发生调用时的事务 ...

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

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

  4. Spring事务传播机制和数据库隔离级别

    Spring事务传播机制和数据库隔离级别 转载 2010年06月26日 10:52:00 标签: spring / 数据库 / exception / token / transactions / s ...

  5. spring 事务传播机制

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

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

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

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

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

  8. spring事务传播实现源码分析

    转载. https://blog.csdn.net/qpfjalzm123/article/details/83717367 本文只是对spring事务传播实现的流程进行简单的分析,如有不对之处请指出 ...

  9. Spring事务传播属性介绍(二).mandatory、not_supported、never、supports

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

随机推荐

  1. CSS是什么

    css是层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言. CSS不 ...

  2. Android笔记(四十) Android中的数据存储——SQLite(二) insert

    准备工作: 我们模拟一个注册的页面,先看UI 我们需要创建一个数据库:user,数据库包含表user,user表包含字段id.username.password.mobilephone MainAct ...

  3. PCM音频数据格式介绍

    http://blog.csdn.net/ljxt523/article/details/52068241 1. What is PCM? PCM(Pulse-code-modulation)是模拟信 ...

  4. Linux命令——systemctl

    前言 systemctl本身的意义并不仅仅是一个命令那么简单,他标志着SysV时代的终结,Systemd时代的开始.CentOS 7.X系列已经抛弃SysV,全面拥抱Systemd这个init sys ...

  5. k8s安装之calico.yaml

    这个calico有点长,我也没有仔细看完. 但部署上去是可用的. 如果节点超过200台,那最好要另外一套配置... 而对于我们,差不多下面的配置够用了. veth_mtu: "1440&qu ...

  6. 51nod 2494 最长配对

    小b有一个01序列,她想找到一个最长的区间使得这个区间的01能两两配对,即0的个数和1的个数相等.求最长区间的长度. 收起   输入 第一行一个正整数n,表示数组长度,其中0<n≤50000: ...

  7. LOJ#3104「TJOI2019」甲苯先生的字符串

    题目描述 一天小甲苯得到了一条神的指示,他要把神的指示写下来,但是又不能泄露天机,所以他要用一种方法把神的指示记下来. 神的指示是一个字符串,记为字符串 \(s_1\),\(s_1\) 仅包含小写字母 ...

  8. Oracle字符串中包含数字、特殊符号的排序

    问题描述: 某小区,需要按照小区.楼栋.单元号.房间号进行排序,但是按照地址描述排序时,因为字符串中包含数字,所以造成了如下的结果, 1号楼之后应该是2号楼,但是查询结果却是10号楼 . 尝试解决 使 ...

  9. 解决Antimalware Service Executable CPU占用高的问题

    windows8/8.1,WIN10自带的安全软件Windows defender还不错,基本可以不用装其他杀毒软件了. 但是其进程Antimalware Service Executable 出现C ...

  10. Django示例演示--?

    引用自:https://blog.csdn.net/weixin_42950386/article/details/83143293 定义模型类 模型类被定义在"应用/models.py&q ...