不恋水的雨 2020-07-29 18:21 采纳率: 0%
浏览 387

activiti工作流一个service调用另一个service时事务不生效?

环境是springboot和mybatis,事务配置用的是spring默认的。
我通过controller层调用service1的方法,然后在service1的方法里面调用service2的方法,当service2的方法正常执行成功后,service1的方法还没有结束,继续往下执行,此时service1方法抛出异常,经过多次尝试,发现service1的事务回滚了,而service2事务没有回滚

service1代码如下:

    @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
    public void startWorkflowByKey() {
                //service1调用service2方法
        service2.startWorkflowByKey();

                //service1修改数据
        mapper.updateLeaveAll(leave);
        /*try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }*/
                //抛出异常
        if(true){
            throw new RuntimeException();
        }
    }


service2代码如下:

@Service
public class WorkflowServiceImpl implements WorkflowService {
    @Autowired
    private RuntimeService runtimeService;
    @Autowired
    private HistoryService historyService;
    @Autowired
    private TaskService taskService;
    @Autowired
    private IdentityService identityService;
    @Autowired
    private RepositoryService repositoryService;
    @Override
    @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
    public ProcessInstance startWorkflowByKey() {
        runtimeService.startProcessInstanceByKey();
        return instance;
    }
}

我让service1线程休眠5秒钟,service1的事务在5秒内没有提交,此时去页面查询,发现service2方法执行完后,事务已经提交了,service2上我加了Propagation.REQUIRED,应该是加入service1的事务才对,但是service2的事务却自己提交了。

这个会是什么原因导致的呢?我要怎么让两个方法中的任何一个方法异常,两个方法都回滚呢?
  • 写回答

1条回答 默认 最新

  • zqbnqsdsmd 2020-07-31 08:31
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?
  • ¥15 有偿四位数,节约算法和扫描算法
  • ¥15 VUE项目怎么运行,系统打不开
  • ¥50 pointpillars等目标检测算法怎么融合注意力机制
  • ¥20 Vs code Mac系统 PHP Debug调试环境配置
  • ¥60 大一项目课,微信小程序
  • ¥15 求视频摘要youtube和ovp数据集