首页 > 其他 > 详细

try-catch 回滚事务,避免回滚失效的操作

时间:2021-07-29 16:06:13      阅读:38      评论:0      收藏:0      [点我收藏+]

阿里手册异常日志篇:【强制】有 try 块放到了事务代码中,catch 异常后,如果需要回滚事务,一定要注意手动回滚事务。

容易让人忽略的是:方法上未加任何属性的@Transactional注解只能在抛出RuntimeException或者Error时才会触发事务的回滚,常见的非RuntimeException是不会触发事务的回滚的。
避免失效有

1. 使用@Transactional(rollbackFor = Exception.class)注解,前提是不含有try{...}catch{...}捕获异常。

2. 使用@Transactional注解,不带任何属性,抛出@Transactional注解默认识别的RuntimeException

  @Transactional
    public String getUserInfo() {
        try {
            //do something 
            return "成功信息";
        } catch (Exception e) {
            e.printStackTrace();
            //异常处理这里采用lombok
            log.error("异常日志", e.getMessage());
            //抛出异常
            throw new RuntimeException();
        }
    }

弊端:非运行时异常不会回滚

3.使用@Transactional(rollbackFor = { Exception.class }),也能抛出捕获的非RuntimeException异常

   @Transactional(rollbackFor = Exception.class)
    public String uploadFile() throws IOException {
        InputStream input = null;
        try {
            input = new FileInputStream("F:\\BaiduNetdiskDownload\\1.jpg");

            int data = input.read();
            while (data != -1) {
                System.out.print((char) data);
                data = input.read();
            }
            //do something
            return "成功信息";
        } catch (Exception e) {
            e.printStackTrace();
            //异常处理这里采用lombok
            log.error("异常日志", e.getMessage());
            //抛出所捕获的异常
            throw e;

        }
    }

4.手动回滚

阿里规约硬性要求的

  @Transactional
    public String getUserInfo() {
        try {
            //do something
            return "成功信息";
        } catch (Exception e) {
            e.printStackTrace();
            //异常处理这里采用lombok
            log.error("异常日志", e.getMessage());
            //手动回滚
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return "自定义异常信息";

        }
    }

参考链接:https://www.cnblogs.com/zjfjava/p/9963958.html

try-catch 回滚事务,避免回滚失效的操作

原文:https://www.cnblogs.com/ringbug/p/15074553.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!