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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ExpandableListView实例(一)_数据库增删改查处理和listitem点击长按处理

    ExpandableListView实例(一)_数据库增删改查处理和listitem点击长按处理本例说明:1.实例中表现层与数据处理层分开,代码可复用性强,如果能看懂代码对算法会有提高.2.组和子条目上”点击”事件处理,能够区分操作的是组还是子条目,并且得到组和子条目的内容.3.组和子条目上”长按”事件处理,能够区分组和子条目,并且得到组和子条目的内容.4.自定义条目样式,灵活与数据库中字段绑定.5.实现对DB的增删改查,并且操作后自动刷新.6.使用数据库处理框架AH

    2022年6月23日
    28
  • 阿基米德三角形「建议收藏」

    阿基米德三角形「建议收藏」已知抛物线\(C:x^2=2py\),弦\(AB\)过\(C\)的焦点\(F\),过\(A,B\)两点作抛物线\(C\)的两条切线,若两切线相交于点\(P\),则(1)

    2022年8月3日
    6
  • 简单软件激活成功教程入门

    简单软件激活成功教程入门一、激活成功教程准备:组合一:侦壳language.exe脱壳AspackDie.exe反编译W32Dasm黄金中文版十六进制编辑器UltraEdit组合二:PEidOllydbg二、

    2022年7月3日
    33
  • ajax解决跨域问题_ajax支持跨域请求

    ajax解决跨域问题_ajax支持跨域请求CORS跨域方案//弊端:存在浏览器兼容的问题需要被请求方的服务端设置:Access-Control-Allow-Origin注意:Access-Control-Allow-Origin不可设置为,设置为可访问的域名。*服务端配置,不同语言,不同写法,仅借鉴header(“Access-Control-Allow-Origin:“http://cdn….

    2022年8月24日
    10
  • 史上最硬核的Linux命令大全,还不收藏? ❤️【通俗易懂,小白一看就会】「建议收藏」

    史上最硬核的Linux命令大全,还不收藏? ❤️【通俗易懂,小白一看就会】「建议收藏」目录????前言????命令汇总????文件管理1️⃣ls命令–显示指定工作目录下的内容及属性信息2️⃣cp命令–复制文件或目录3️⃣mkdir命令–创建目录4️⃣mv命令–移动或改名文件5️⃣pwd命令–显示当前路径????文档编辑1️⃣cat命令–在终端设备上显示文件内容2️⃣e…

    2022年10月21日
    3
  • vue中使用input file上传文件

    vue中使用input file上传文件刚刚学习前端的时候还是觉得这个东西好难的样子,后来第一家公司由于没有这个需求就没用过,现在这家公司由于要求很完美的组件,我就是用的vue组件vue-image-crop-upload(适用于pc端的比较好的组件),先在这里记录用法下次再去把vue-images-crop-upload这个组件记录下…

    2022年7月17日
    76

发表回复

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

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