spring事务回滚机制_事务回滚失败

spring事务回滚机制_事务回滚失败使用来配置自动回滚,可以配置在类上,也可以配置在方法上(作用域不同),但对final或private修饰的方法无效,且该类必须是受spring所管控的。若被配置的方法或类抛出了异常,则事务会被自动回滚,除非你在该方法中手动捕获了异常。可以使用来设定针对特定的异常进行事务回滚,如果不设置则默认会回滚RuntimeExceptionandError(参考自源码内文档)。通过注入来手动开启事务,手动回滚事务,用于抛出异常被catch后,进行手动回滚。…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

Spring事务回滚

  1. 使用 @Transaction 来配置自动回滚,可以配置在类上,也可以配置在方法上(作用域不同),但对final或private修饰的方法无效,且该类必须是受spring所管控的。

    @Service
    @Transactional
    public class UserServiceImpl implements UserService { 
         
        @Override
        public void save(User user) { 
         
            //some code
            //db operation
        }
    }
    

    Jetbrains全家桶1年46,售后保障稳定

  2. 若被配置的方法或类抛出了异常,则事务会被自动回滚,除非你在该方法中手动捕获了异常。可以使用 @Transactional(rollbackFor = Exception.class) 来设定针对特定的异常进行事务回滚,如果不设置则默认会回滚 RuntimeException and Error (参考自源码内文档)。

    @Service
    @Transactional(rollbackFor = Exception.class)
    public class UserServiceImpl implements UserService { 
         
        @Resource
    	private UserMapper userMapper;
        
        @Override
        public void save(User user) { 
         
            userMapper.insert(user);
            throw new RuntimeException(); // 抛出异常,事务回滚,上面的insert插入失败。
        }
    }
    
  3. 通过注入 DataSourceTransactionManager 来手动开启事务,手动回滚事务,用于抛出异常被catch后,进行手动回滚。

    @Service
    public class UserServiceImpl implements UserService { 
         
        @Autowired
        private DataSourceTransactionManager transactionManager;
    
        @Override
        @Transactional
        public void save(User user) { 
         
            DefaultTransactionDefinition def = new DefaultTransactionDefinition();
            // explicitly setting the transaction name is something that can only be done programmatically
            def.setName("SomeTxName");
            def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
    
            TransactionStatus status = transactionManager.getTransaction(def);
            try { 
         
                // execute your business logic here
                //db operation
            } catch (Exception ex) { 
         
                transactionManager.rollback(status);
                throw ex;
            }
        }
    } // 此代码案例来自Alibaba Coding Guidelines
    
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/179398.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python中class 类定义与使用

    python中class 类定义与使用python中class类定义与使用在学习python中类这一部分也是非常常用的,类的定义类似于函数却又不同于函数,class定义一个类,后面的类别首字母推荐以大写的形式定义,比如Calculator.class可以先定义自己的属性,比如该属性的名称可以写为name=‘GoodCalculator’.class后面还可以跟def,定义一个函数.比如defadd(self,x,y…

    2022年6月10日
    34
  • HDU 3788 和九度OJ 1006测试数据是不一样的

    HDU 3788 和九度OJ 1006测试数据是不一样的

    2022年1月8日
    47
  • miRNA靶基因软件预测分值如何看?

    miRNA靶基因软件预测分值如何看?https www nature com articles nsmb 2678Weextrac mRNApairswit REC lt 6 2 FDR lt 2 10 4 4 584pairswith and

    2025年10月31日
    3
  • PriorityQueue解析

    PriorityQueue解析转载出自于深入理解JavaPriorityQueueJava中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示。本文从Queue接口函数出发,结合生动的图解,深入浅出地分析PriorityQueue每个操作的具体过程和时间复杂度,将让读者建立对PriorityQueue建立清晰而深入的认识。总体介绍前面以JavaArrayDeque为例讲解了Stack和Q

    2022年4月30日
    36
  • 低延迟视频传输_网络延时

    低延迟视频传输_网络延时微信后台如何应对像跨年,特殊时刻(比如2022年2月22日22时22分22秒)这样的朋友圈突发流量,可做如下策略(只是比如):优先让发一张图片的成功。九宫格只成功一部分,剩余的强有损压缩。朋友多的优先成功。(也可以反过来)设置三天可见的优先成功。(也可以反过来)年轻女性优先成功。(这个没毛病)历史点赞多的优先成功。(也可以反过来)头像穿西装打领带的经理统统失败。…在不影响P99用户体验的前提下,提供有损服务,保证核心可用性,这就是柔性。但数据传输的思维定势并不认可柔性。受TCP的影

    2022年10月3日
    2
  • RuntimeException和Exception区别

    RuntimeException和Exception区别1.java将所有的错误封装为一个对象,其根本父类为Throwable,Throwable有两个子类:Error和Exception。2.Error是Throwable的子类,用于指示合理的应用程序不应该试图捕获的严重问题。大多数这样的错误都是异常条件。虽然ThreadDeath错误是一个“正规”的条件,但它也是Error的子类,因为大多数应用程序都不应该试图捕获它。在执行该方…

    2022年7月25日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号