博客
关于我
@Transactional注解事务不回滚不起作用无效(转载)
阅读量:538 次
发布时间:2019-03-09

本文共 954 字,大约阅读时间需要 3 分钟。

@Transactional注解事务不回滚的排查与解决方案

在项目中使用@Transactional注解事务后,遇到异常不回滚的问题确实让人头疼。经过一番排查,我找到了几个关键点,希望能帮到有同样困扰的小伙伴。

一、了解@Transactional的事务特性

  • 注解的使用位置

    @Transactional注解通常建议放在service类上,而不是接口上。这样整个类就被纳入了Spring的事务管理,每个业务方法执行时都会开启一个事务。不过,你得注意,这个注解只能应用在public可见度的方法上。如果方法是protected、private或者package-scoped,虽然不会报错,但事务也不会起作用。这一点是一个常见的错误原因。

  • 异常类型与事务回滚

    Spring默认情况下,对于unchecked异常(比如空指针、除以零等)会进行事务回滚;但对于checked异常(如IOException、TimeoutException等),则不会回滚。所以,确认你抛出的异常类型。如果是checked异常,可以在注解中指定@Transactional(rollbackFor=Exception.class),这样就能确保回滚了。

  • 数据库引擎支持

    在MySQL中,如果使用MyISAM引擎,事务可能不起作用,因为MyISAM不支持事务。所以,必须确认数据库引擎是支持事务的,比如InnoDB。

  • 二、事务传播模式的配置

    确保事务管理器被正确配置,包括注解驱动和组件扫描。通常,配置文件中会有如下内容:

    这样Spring才能扫描到注解并管理事务。

    三、排查事务是否生效

  • 同一类内的方法调用

    在同一个类中调用另一个方法时,若另一个方法没有被@Transactional注解包裹,事务可能不会起作用。所以,确保调用者没有被事务管理器包裹,或者在方法中使用@Transactional方法。

  • 异常是否被捕获

    如果在方法中抛出了异常但没有被正确捕获,事务可能不会回滚。所以,检查异常处理逻辑,确保异常能够被捕获并处理。

  • 通过以上步骤,希望能够解决@Transactional注解事务不回滚的问题。遇到类似问题时,先从注解的使用位置、异常类型、数据库引擎以及事务传播模式入手,逐步排查问题,确保每一步都配置正确。

    转载地址:http://rhmiz.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现DoublyLinkedList双链表的算法(附完整源码)
    查看>>
    Objective-C实现DoublyLinkedList双链表算法(附完整源码)
    查看>>
    Objective-C实现DPLL(davisb putnamb logemannb loveland)算法(附完整源码)
    查看>>
    Objective-C实现DWT离散小波变换(附完整源码)
    查看>>
    Objective-C实现Edmonds-Karp算法(附完整源码)
    查看>>
    Objective-C实现EEMD算法(附完整源码)
    查看>>
    Objective-C实现elgamal 密钥生成器算法(附完整源码)
    查看>>
    Objective-C实现EM算法(附完整源码)
    查看>>
    Objective-C实现EM算法(附完整源码)
    查看>>
    Objective-C实现entropy熵算法(附完整源码)
    查看>>
    Objective-C实现euclidean distance欧式距离算法(附完整源码)
    查看>>
    Objective-C实现Euclidean GCD欧几里得最大公约数算法(附完整源码)
    查看>>
    Objective-C实现euclideanDistance欧氏距离算法(附完整源码)
    查看>>
    Objective-C实现euler method欧拉法算法(附完整源码)
    查看>>
    Objective-C实现euler modified变形欧拉法算法(附完整源码)
    查看>>
    Objective-C实现eulerianPath欧拉路径算法(附完整源码)
    查看>>
    Objective-C实现Eulers TotientFunction欧拉函数算法(附完整源码)
    查看>>
    Objective-C实现eulers totient欧拉方程算法(附完整源码)
    查看>>
    Objective-C实现EulersTotient欧拉方程算法(附完整源码)
    查看>>
    Objective-C实现eval函数功能(附完整源码)
    查看>>