美文网首页
Spring中的事务问题记录

Spring中的事务问题记录

作者: 从零开始的程序猿生活 | 来源:发表于2020-12-17 10:22 被阅读0次

问题:

org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only
        try {
            checkSomething();
        }catch (CustomizeException e){
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            if (e.getStatus() != 200){
                throw new CustomizeException(e.getStatus(),e.getMsg(),e.getData());
            }
        }

在事务中这个操作造成的问题。

原因:默认spring事务只在发生未被捕获的 RuntimeExcetpion时才回滚。

上面的代码因为设置了事务回滚,但是现在的判断导致有可能不会显示的抛出异常所以会报错。

Spring中的@Transactional声明事务

原理:

用注解方式声明的事务是建立在AOP上的,本质是在方法执行前后就行拦截,然后在方法执行前加入一个事务,在执行后提交事务或者回滚事务。被拦截的方法必须显示的抛出异常,这样才能呗aop代理捕获并回滚事务,如果异常被处理,就无法就行回滚,会抛出异常。

缺点:

这个方式声明的事务的粒度是方法级别的(编程式事务粒度是可以到代码块的)。不过可以通过抽取方法单独建立事务来实现同样的效果。

问题解决:

在Service层不处理这个异常,把异常处理拿到Controller层中处理即可解决。

        try {
            checkSomething();
        }catch (CustomizeException e){
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            throw new CustomizeException(e.getStatus(),e.getMsg(),e.getData());
        }

相关文章

  • Spring中的事务问题记录

    问题: 在事务中这个操作造成的问题。 原因:默认spring事务只在发生未被捕获的 RuntimeExcetpio...

  • 问题记录

    面试题记录 spring spring事务传播机制和隔离级别? spring支持的事务类型? 什么是 Spring...

  • Spring事务配置&&回滚失效的原因之一

    包名的配置问题 Spring 事务的隔离性 Spring事务的传播行为 事务配置 applicationConte...

  • Spring中实现事务方式

    Spring 中实现事务的方式 Spring 并不直接支持事务,只有当数据库支持事务时,Spring 才支持事务,...

  • 记录Spring事务不生效的问题

    首先要说明的一点是Spring的事务注解可以写在controller 也可以写在service层,下次见到写在co...

  • Spring循环事务commit问题

    Spring循环事务commit问题 1.抛出问题 在工作中,遇到了一个需求,写一个批量任务,将商品表的一条记录给...

  • (四)Spring的事务管理

    什么是Spring的事务管理   在实际开发中,操作数据库时都会涉及到事务管理问题,为此Spring提供了专门用于...

  • 深入理解Spring事务的传播行为

    本文主要介绍下Spring事务中的传播行为。 事务传播行为介绍 Spring中的7个事务传播行为: 举例说明 案例...

  • Spring事务笔记--事务传播

    Spring中事务支持的重要类:TransactionDefinition Spring支持的7种事务类型: PR...

  • Spring事务之编程式事务

    一.Spring对编程式事务的支持 Spring中的事务分为物理事务和逻辑事务;物理事务:就是底层数据库提供的事务...

网友评论

      本文标题:Spring中的事务问题记录

      本文链接:https://www.haomeiwen.com/subject/scgagktx.html