异常处理(针对执行事务中,发生的自定义异常处理)

项目结构:

1.serviceImpl 对象服务类

2.exception 自定义异常类

实现原理:

1.在一个serviceImpl的实现方法中,复杂事务的处理时,如果事务中仅有部分完成,那么就不能执行整个方法,需要执行回滚。下面是一个示例:StudentServiceImpl中的一个实现方法

    @Transactional
    @Override
//    @Transactional 和 事务 和 发生异常回滚 有联系
    public void addStudentAndScore(StudentServiceParam param) {
        try{
//        添加学生
            Student student = new Student(param.getSno(),param.getSname(),param.getSage(),
                    param.getSsex());
            studentMapper.insert(student);
//        添加课程
            Course course = new Course(param.getCno(),param.getCname(),param.getTno());
            courseMapper.insert(course);
//        添加SC
            courseMapper.insertSc(param.getSno(),param.getCno(),param.getScore());

        }catch (Exception e){
//            打印日志信息等
//            打印异常堆栈信息
            e.printStackTrace();
//           抛出自定义的异常
            throw new TjEtcException(e,10246,"保存课程和学生成绩失败");

        }
    }

方法中当添加课程失败时,添加sc就不会成功,进而整个事务不能被完成,因此需要事务回滚。

*运行时异常抛出,事务发生回滚

这里我们try catch打印并抛出了一个自定义异常类 TjEtcException,来满足事务需求,下文会提到

2.所以我们要写自定义业务异常 TjEtcException类继承RuntimeException,类中可以自定义针对事务的异常属性,并写出继承RuntimeException的构造方法

@Data
public class TjEtcException extends RuntimeException{

    private  int errorCode;

    private String eorrorMsg;

    /**
     * 构造方法
     *
     * @param cause 异常对象
     * @param errorCode 异常错误码
     * @param eorrorMsg 错误信息
     */
    public TjEtcException(Throwable cause,int errorCode, String eorrorMsg) {
        super(cause);
        this.errorCode = errorCode;
        this.eorrorMsg = eorrorMsg;
    }

}

3.通过这种自定义异常类的方式,我们可以明确异常发生的类型,区分异常Exception是否为业务引起的。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老大哥注释着你

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值