springboot事务回滚要怎么配置?有几种方法?

TheDisguiser 2020-06-18 22:03:45 java常见问答 7251

小伙伴们肯定都知道springboot吧,现如今只要是个程序员就没有不知道springboot的。如今在各种企业级应用开发中事务回滚使用的非常频繁,小伙伴们知道springboot中该怎么配置事务回滚吗?它有几种方法呢?下面就跟小编来详解了解下吧。

在springboot如果想集成事务的回滚操作,有两种方法,一是自动回滚,二是手动回滚,不管哪种回滚都必须使用到@Transactional注解。下面我们来看看它们要怎么使用吧。

一、自动回滚

自动回滚有个前提条件,它一定必须是public的,其次,在它的方法上必须要添加上@Transactional 注解。

例:

    @Override
    @Transactional
    public Boolean add()
    {
        try
        {
            //第一次插入,教师表
            Teacher teacher = teacherService.add();
            if (teacher == null)
            {
                return null;
            }
            //第二次插入,学生表
            int result = studentMapper.insertSelective(student);
            if (true)
            {
                throw new Exception();
            }
            return true;
        }
        catch (Exception e)
        {
            //唯一区别,在这里
            throw new RuntimeException();
        }
        finally
        {}
    }

二、手动回滚

手动回滚的唯一条件就是一定要在方法上加入@Transactional注解,它与自动回滚的唯一区别可能就是要用到

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); 语句了吧,这个语句就是手动回滚语句。

例:

    @Override
    @Transactional
    public Boolean add()
    {
        try
        {
            //第一次插入,教师表
            Teacher teacher = teacherService.add();
            if (teacher == null)
            {
                return null;
            }
            //第二次插入,学生表
            int result = studentMapper.insertSelective(student);
            if (true)
            {
                throw new Exception();
            }
            return true;
        }
        catch (Exception e)
        {
            //唯一区别,在这里
            TransactionAspectSupport.currentTransactionStatus()
                .setRollbackOnly();
        }
        finally
        {}
    }

PS:其实以实际来说,我们不一定非要在catch中添加手动回滚语句,你其实可以在任何一个地方进行判断然后使用手动回滚语句,它会继续之后语句后的所有方法,但一般不建议这样使用,可能会有不必要的性能损耗出现。

以上就是今天的全部内容了,如果你还想了解更多java架构师知识,就一定要持续关注我们的网站噢。

推荐阅读:

springboot部署方式有哪些?要如何部署?

springboot部署到服务器流程有哪些?

springboot框架搭建详解,怎么搭建springboot框架?