一个方法中有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; }