1、背景
上一篇文章,为解决大事务问题,将for循环的每个订单的处理放在了编程式事务的代码中,但是在落地的时候,遇到了一个比较特殊的情况,外层方法中使用了 @Transactional注解,内部再用编程式事务,是融到一个事务中,还是单独提交呢?
2、实际验证
方法上加一个@Transactional注解,step1更新id=4426的数据,
step2单独写一个编程式事务,更新id=4451的数据
原来的数据
执行完step1后
执行完step2后
方法跳出后
3、结论
写在@Transactional注解的方法中的编程式事务,默认和这个方法的事务是同一个,需要在外层事务整体提交后变更才生效
4、原因
在@Transactional注解中有一个参数是propagation,代表事务传播机制
在编程式事务中也有,
默认的是0,即当前有事务,使用当前事务;当前没事务,新建一个事务