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
    
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 学生成绩管理系统(C语言)「建议收藏」

    学生成绩管理系统(C语言)「建议收藏」思路学生成绩管理系统,首先要初始化系统,开始一个新的学生成绩系统初始化记录学生姓名,学号,院系,然后输入学生各科成绩,数学,英语,语文成绩。记录完各课成绩以后,可查看学生平均成绩和是否及格,成绩查询其中有学号查询,姓名查询,院系查询,还有全部输出,可以清晰的看到及格人数,按照分数高低排列,最后还可以添加和删除学生成绩,或者更改学生成绩,避免人为录入成绩错误。基本函数1.结构体structStudent定义一个结构体struct,结构体的关键字,students定义的结构体对象。学…

  • HDU-1387-Team Queue

    HDU-1387-Team Queue

  • Java中this关键字详解

    Java中this关键字详解一、this关键字主要有三个应用: (1)this调用本类中的属性,也就是类中的成员变量; (2)this调用本类中的其他方法; (3)this调用本类中的其他构造方法,调用时要放在构造方法的首行。PublicClassStudent{Stringname;//定义一个成员变量nameprivatevoidSetName(Stringname){

  • mac如何装windows系统_bootcamp您的磁盘未能分区

    mac如何装windows系统_bootcamp您的磁盘未能分区问题:启动磁盘不能被分区或恢复成单个分区苹果电脑装了双系统,但是一直用的mac系统,所以打算把windows卸载。看到网上说直接用Bootcamp助理卸载就行,但是点“继续”的时候出现问题:启动磁盘不能被分区或恢复成单个分区。接下来就是要解决这个问题啦!可以看到我现在有三个盘,MachintoshHD为mac系统所在盘,这是我要保留的,另外两个是装windows分配的盘,所以需要卸载这…

  • navicate15激活码【在线破解激活】

    navicate15激活码【在线破解激活】,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • 关于Android多按钮切换的例子!

    关于Android多按钮切换的例子!

发表回复

您的电子邮箱地址不会被公开。

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