多个数据库操作 同步回滚问题

一个方法中有N个service方法进行数据库操作,如果某个发生异常,那么之前成功的数据库操作,也要回滚。

在该方法上添加注解@Transactional注解即可,出现异常能够自动回滚。但是如果代码中进行了tay catch去捕获异常,那么要在catch中去手动

回滚。添加代码:

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

demo: 使用的mybatis-plus 

@Transactional
    @RequestMapping(value = "/xxxxxxxxxxx", method = RequestMethod.POST)
    public ResponseWrapper<Object> recordAdd(@RequestBody AddEnterpriseInfoDTO addEnterpriseInfoDTO,HttpSession session) {
        ResponseWrapper<Object> returnResult = new ResponseWrapper<Object>();

        try {
            EntEnterprisearchives etEnterprisearchives = addEnterpriseInfoDTO.getEtEnterprisearchives();
            EntManagementinfo entManagementLeaderInfo = addEnterpriseInfoDTO.getEntManagementLeaderInfo();
            EntManagementinfo entManagementCarCaptainInfo = addEnterpriseInfoDTO.getEntManagementCarCaptainInfo();

            if (etEnterprisearchives != null && entManagementLeaderInfo != null && entManagementCarCaptainInfo != null) {

                Date date = new Date();
                entManagementLeaderInfo.setRegtime(date);
                // 存储领导信息
                entManagementinfoService.saveOneObjCustom(entManagementLeaderInfo);
                Integer leaderId = entManagementLeaderInfo.getId();

                entManagementCarCaptainInfo.setRegtime(date);
                // 存储车队长信息
                entManagementinfoService.saveOneObjCustom(entManagementCarCaptainInfo);
                Integer carCaptainId = entManagementCarCaptainInfo.getId();

                log.info(">>>>>>leaderId=" + leaderId + ">>>>>>carCaptainId=" + carCaptainId);
                etEnterprisearchives.setLeaderId(leaderId);
                etEnterprisearchives.setCaptainId(carCaptainId);
                etEnterprisearchives.setRegtime(date);

                entEnterprisearchivesService.save(etEnterprisearchives);
                returnResult.setSuccess(true);
            } else {
                returnResult.setSuccess(false).setMsg("不允许参数信息为null");
            }

        } catch (Exception e) {
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            log.info("xxxxxx异常,==>e.getMessage:" + e.getMessage() + ",==>e.getStackTrace():" + e.getStackTrace()+ ",==>e:" + e);
            returnResult.setSuccess(false).setMsg("xxxxxx");
        }
        return returnResult;
    }

猜你喜欢

转载自www.cnblogs.com/dxxdsw/p/10718513.html
今日推荐