美文网首页
手动抛出异常,事务回滚

手动抛出异常,事务回滚

作者: 林太浪先生 | 来源:发表于2019-05-22 11:51 被阅读0次

https://blog.csdn.net/qq_38283331/article/details/79861973

public class CommonExceptionextends RuntimeException {

private ErrorCodeEnumcodeEnum;

    public CommonException(ErrorCodeEnum codeEnum) {

this.codeEnum = codeEnum;

    }

public ErrorCodeEnumgetCodeEnum() {

return codeEnum;

    }

public void setCodeEnum(ErrorCodeEnum codeEnum) {

this.codeEnum = codeEnum;

    }

}

//涉及回滚,发生异常就会事务回滚

@Transactional(rollbackFor = Exception.class)

@Override

    public boolean updateTask(TaskUpdateVO taskVO) {

Date startTime = taskVO.getPlanStartTime();

        Date endTime = taskVO.getPlanEndTime();

        List newEvaluators = taskVO.getEvaluatorList();

        checkSelfTime(startTime, endTime);

        checkParentTime(taskVO.getParentId(), startTime, endTime);

        checkSonTime(taskVO.getId(), startTime, endTime);

        TaskDetailVO oldTask =this.queryTaskDetail(taskVO.getId());

        if (oldTask ==null) {

//手动抛出异常

throw new CommonException(ErrorCodeEnum.NO_OLD_TASK_ERROR);

        }

if (oldTask.getTaskStatus().equals(TaskStatusEnum.HAVE_FINISH.getCode())) {

//手动抛出异常

throw new CommonException(ErrorCodeEnum.TASK_IS_FINISH);

        }

List oldEvaluators = oldTask.getEvaluatorList();

        String oldResponsibleId = oldTask.getResponsiblePersonId();

        String responsiblePersonId = taskVO.getResponsiblePersonId();

        taskMapper.update(taskVO);

        TaskDetailVO newTask =this.queryTaskDetail(taskVO.getId());

//        Set responsiblePersonIdSet = new HashSet<>(Splitter.on(",").trimResults().omitEmptyStrings().splitToList(responsiblePersonId));

        if (responsiblePersonId.equals(oldResponsibleId)) {

//只是修改了任务内容,发送邮件

            if (!isChangeTask(oldTask, newTask)) {

mailService.sendUpdateTaskNotifyMail(oldTask, newTask);

            }

}else {

//负责人修改,对他来说任务被删除

            Person deletePerson =personMapper.selectByPrimaryKey(RequestContextUtil.getUserId());

            mailService.sendDeleteTaskNotifyMail(oldTask, deletePerson.getPersonName());

            // 新的人员认为是新增了任务,发送邮件

            mailService.sendAddTaskNotifyMail(newTask);

        }

if (!CollectionUtils.isEmpty(newEvaluators)) {

for (EvaluatorVO newEvaluator : newEvaluators) {

if (isEvaluator(oldEvaluators, newEvaluator)) {

if (!(isChangeTask(oldTask, newTask) && oldTask.getResponsiblePersonId().equals(newTask.getResponsiblePersonId())))

mailService.sendUpdateToEvaluator(oldTask, newTask, newEvaluator.getEvaluatorId());

                }else {

//评价人变更,新评价人发送被选为评价人邮件

                    TaskAddVO taskAddVO =new TaskAddVO();

                    BeanUtils.copyProperties(newTask, taskAddVO);

                    insertEvaluator(newEvaluator,newTask.getId());

                    //被选为评价人通知

                    mailService.sendBeEvaluatorNotifyMail(taskAddVO, newEvaluator, responsiblePersonId);

                }

}

}

if (!CollectionUtils.isEmpty(oldEvaluators)) {

for (EvaluatorVO oldEvaluator : oldEvaluators) {

if (!isEvaluator(newEvaluators, oldEvaluator)) {

//数据库删除

                    evaluateMapper.delete(oldEvaluator.getId());

                    //向删除的评价人发送评价任务删除提醒

                    mailService.sendDeleteEvaluateNotifyMail(newTask, oldEvaluator);

                }

}

}

return true;

    }

相关文章

  • 手动抛出异常,事务回滚

    https://blog.csdn.net/qq_38283331/article/details/7986197...

  • springboot的事务回滚写法

    参考阿里的编程扫描 事务场景中,抛出异常被catch后,如果需要回滚,一定要手动回滚

  • Spring学习笔记(五)-事务的管理

    1.Spring的事务提交回滚 (1).运行期抛出的异常,spring会将事务回滚也就是(uncheck的异常) ...

  • Spring事务失效的8大原因

    一、异常被吃了 把异常吃了,然后又不抛出来,事务不会回滚。 二、异常类型错误 这样事务也是不生效的,因为默认回滚的...

  • Spring事务

    先说结论:Spring事务异常回滚,捕获异常不抛出就不会回滚。最近遇到了事务不回滚的情况,我还考虑说JPA的事务有...

  • spring事务失效的几种场景及原因

    1. 抛出检查异常导致事务不能正确回滚 原因:spring默认只会回滚非检查异常解法:配置rollbackFor属...

  • laravel transaction 数据库事务

    laravel 提供专门的闭包的数据库事务,可以自动回滚事务也可以手动回滚事务

  • Spring:事务timeout参数

    timeout事务的超时时间,默认值为-1。如果超过该时间限制但事务还没有完成,则自动回滚事务。 方法抛出异常,事...

  • 事务相关的问题总结

    一、事务回滚问题 二、事务失效问题 三、事务失效的解决办法 方式一:自己手动创建事务,提交事务,回滚事务(Spri...

  • spring 事务与Exception的关系

    第一个问题:Spring官方建议的通知事务管理器回滚事务的方式是从事务执行上下文中抛出一个异常,当这个异常沿着堆栈...

网友评论

      本文标题:手动抛出异常,事务回滚

      本文链接:https://www.haomeiwen.com/subject/czpyzqtx.html