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)
上一篇 2022年10月21日 下午6:16
下一篇 2022年10月21日 下午6:16


相关推荐

  • 虚拟机开启就会蓝屏的解决方法是_虚拟机无限蓝屏

    虚拟机开启就会蓝屏的解决方法是_虚拟机无限蓝屏VMware与win10(专业版)不兼容的问题前两天系统出了点问题,然后重置了系统,结果今天装VMware的时候发现一开虚拟机就蓝屏了。一、首先打开控制面板,找到启动或关闭Windows功能二、打开win+R,输入gpedit.msc三、打开控制面板>程序>查看已安装的更新,卸载最近的更新。总结前两天系统出了点问题,然后重置了系统,结果今天装VMware的时候发现一开虚拟机就蓝屏了。找了好些方法,重启了十几次电脑,后面才弄好提示:以下是本篇文章正文内容,下面案例可供参考一、首先打开控制

    2025年9月6日
    7
  • Merkle Tree学习

    Merkle Tree学习转载自 https www cnblogs com fengzhiwu p 5524324 htmlMerkleTr 概念 MerkleTree 通常也被称作 HashTree 顾名思义 就是存储 hash 值的一棵树 Merkle 树的叶子是数据块 例如 文件或者文件的集合 的 hash 值 非叶节点是其对应子节点串联字符串的 hash 1 1 nbsp Hash Hash 是一个把任意长度的数

    2026年3月18日
    2
  • java三目运算符判断boonlean,java三元运算符

    java三目运算符判断boonlean,java三元运算符首先看一下三元运算符的格式 条件语句 表达式 1 表达式 2 其中如条件语句为真执行表达式 1 否则执行表达式 2 简单的例子就不举了 来点其它的 在 JDK1 5 以前的版本中 表达式 1 和表达式 2 都要求是相同的类型 比如都是 String 或者 char 之类的 在 JDK1 5 以后 有了自动拆箱和装箱的原因 两者只要其中一种或者两者都能被拆箱即可 比如表达式 1 为 Integer 而表达式 2 为 int 类型

    2026年3月26日
    2
  • 递归算法讲解

    递归算法讲解原作者 书呆子 Rico 递归的内涵与经典应用 http my csdn net justloveyou 摘要 大师 L PeterDeutsch 说过 ToIterateisH toRecurse Divine 中文译为 人理解迭代 神理解递归 毋庸置疑地 递归确实是一个奇妙的思维方式 对一些简单的递归问题 我们总是惊叹于递归描述问题的能力和编写代

    2026年3月18日
    2
  • 程序设计 – Palindrome(Java)

    程序设计 – Palindrome(Java)分享一个大牛的人工智能教程 零基础 通俗易懂 风趣幽默 希望你也加入到人工智能的队伍中来 请点击 http www captainbed netpackagech learning java authorCreate publicclassP publicstatic

    2026年3月19日
    3
  • GenAI Agents技术趋势:AI智能体技术的未来发展方向

    GenAI Agents技术趋势:AI智能体技术的未来发展方向

    2026年3月16日
    2

发表回复

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

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