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. java web编程 servlet

    先从请求的信息里面获取协议,版本协议如果是1.1结尾的就报错,也就是我们常见的405报错: 405是协议请求方式错误,所以要重写doget或者dopost方法,直接调用父类的get和post方法是会报 ...

  2. Linux下MySQL的数据文件存放在哪里的??

    http://bbs.csdn.net/topics/390620630 mysql> show variables like '%dir%';+------------------------ ...

  3. CRM-Modelformset

    CRM-Modelformset 效果图 利用modelformset实现上面的效果: views.py文件: from user.formself.myform import RegForm, Cu ...

  4. array_push

    array_push() 函数向第一个参数的数组尾部添加一个或多个元素(入栈),然后返回新数组的长度. 该函数等于多次调用 $array[] = $value. 1:即使数组中有字符串键名,您添加的元 ...

  5. 渗透之路基础 -- 跨站伪造请求CSRF

    漏洞产生原因及原理 跨站请求伪造是指攻击者可以在第三方站点制造HTTP请求并以用户在目标站点的登录态发送到目标站点,而目标站点未校验请求来源使第三方成功伪造请求. XSS利用站点内的信任用户,而CSR ...

  6. CF1167E. Range Deleting

    题意 给定长度为\(n\)的数组\(a\),其中任意\(a_i \leq x\) 定义\(f(l,r)\)为删除\(a\)中值域在\([l,r]\)的数后剩余的数组. 统计满足\(1\leq l \l ...

  7. Django之路——4 Django的视图层

    一个视图函数简称称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何 ...

  8. Analysis of algorithms: introduction

    一系列的人物角色 Programmer,client,theoretician和blocking 学生可能会承担里面的一个或者多个角色 Running time 提出running time这个概念的 ...

  9. 修改Windows10 命令终端cmd的编码为UTF-8

    1. 临时修改 进入cmd窗口后,直接执行 chcp 2. 永久修改 在运行中输入regedit,找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Pro ...

  10. PHPstorm不停Indexing最新解决办法

    PHPstorm不停Indexing最新解决办法   1.网络上千篇一律的解决办法 File -> Invalidate Caches / Restart... -> Invalidate ...