• spring事务配置异常


    spring事务配置不回滚
    spring事务管理配置,一般来说都是可以回滚的,最近在开发的过程中遇到了一个异常不回滚的问题,最终找到了原因,贴出来一下

    1、首先这里定义一个接口


    在接口中定义几个方法

    2、然后实现这个接口


    在实现的接口方法中,引用一个只在实现类中定义的方法,并添加了事务管理注解。


    3、这里声明了dubbo服务,便于远程调用


    当这个doTransfer的方法中发生异常时,并没有执行回滚操作
    找了许久,最后通过IDEA对配置文件Spring的事务管理配置
    <tx:annotation-driven transaction-manager=“transactionManager” />
    的便捷性按钮上找到问题,如下:
    点击 m 标志


    查询到标记事务管理的方法名称列表:



    而doTransfer并没有在其中,原因是这里spring拿到的bean是定义的接口,所能管理到的也只能是接口中定义的方法,在实现类中直接定义的方法,没有在父类中定义,所以spring容器拿不到这个方法名,也便管理不到,所以出现事务操作异常后不会滚的现象。

    事务异常 Transaction rolled back because it has been marked as rollback-only


    问题分析:双层事务,内部事务异常,外层事务中捕获后未抛出,而继续提交外层事务,则会出现该异常信息
    即:A方法存在事务管理,且A方法中调用的B方法也存在事务管理,但A方法对B方法的事务异常做了捕获不处理抛出的操作,导致B方法中事务异常后,A方法中继续提交事务,而此时B方法的事务是不允许提交的,因此便会抛出该异常。
    解决:将底层内部事务的异常捕获后直接抛出,不再进行外层事务的提交。

  • 相关阅读:
    Spring学习记录(八)---Bean的生命周期
    Spring学习记录(七)---表达式语言-SpEL
    Spring学习记录(六)---使用外部属性文件
    Spring学习记录(五)---bean的作用域scope
    Spring学习记录(四)---bean之间的关系:继承、依赖
    Spring学习记录(三)---bean自动装配autowire
    Spring学习记录(二)---容器和bean属性配置
    2017.9
    Flask
    ELK
  • 原文地址:https://www.cnblogs.com/zhuyeshen/p/10913822.html
Copyright © 2020-2023  润新知