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

最新文章

  1. NFC:Arduino、Android与PhoneGap近场通信
  2. insert table 和create table as 区别
  3. MySql指令集
  4. Add Customerlize Button in More Button List In Odoo
  5. A Simple Problem with Integers(树状数组HDU4267)
  6. HTML5 input新增的几种类型(数字、日期、颜色选取、范围)
  7. 怎么从代码中拿到栈回溯信息(call stack trace)
  8. iOS字体 UIFont 字体名字大全
  9. 分类器是如何做检测的?——CascadeClassifier中的detectMultiScale函数解读
  10. WinForm控件Dock属性设置会遮盖其他控件的解决
  11. how find out what is causing Visual Studio to think each project is out of date
  12. [每天解决一问题系列 - 0005] WiX Burn 如何校验chained package的合法性
  13. 那些年我们遇到的坑(1)-Description Resource Path Location Type Archive for required library
  14. sqlserver服务器名称改成本地IP地址登录
  15. 第十三次ScrumMeeting博客
  16. sql server中的日期函数
  17. FTRL算法
  18. Mac Finder中如何复制当前完整路径
  19. Ecplise项目转移到Android Studio,以及Genymotion模拟器介绍
  20. python3.x学习笔记2018-02-05更新

热门文章

  1. 聊聊 ES6 中的箭头函数
  2. Python学习文档指引
  3. 整理:史上最简单的 MySQL 教程
  4. ansible之基础篇(一)
  5. ISCC之msc2
  6. 【转】解决maven无法加载本地lib/下的jar包问题(程序包XXX不存在)
  7. 《你说对就队》第九次团队作业:【Beta】Scrum meeting 2
  8. dt二次开发之-url伪静态的自定义
  9. Python读取csv内容
  10. c++中形参为引用和非引用时调用构造函数