博客
关于我
@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/

    你可能感兴趣的文章
    oppo后端16连问
    查看>>
    Optional类:避免NullPointerException
    查看>>
    Optional讲解
    查看>>
    ORA-00932: inconsistent datatypes: expected - got NCLOB【ORA-00932: 数据类型不一致: 应为 -, 但却获得 NCLOB 】【解决办法】
    查看>>
    ORA-00942 表或视图不存在
    查看>>
    ORA-01034: ORACLE not available
    查看>>
    ORA-01152: 文件 1 没有从过旧的备份中还原
    查看>>
    ORA-01207:文件比控制文件更新 - 旧的控制文件
    查看>>
    ORA-01795: 列表中的最大表达式数为 1000
    查看>>
    ORA-06575: 程序包或函数 NO_VM_DROP_PROC 处于无效状态
    查看>>
    ORA-08102的错误
    查看>>
    ORA-12505, TNS:listener does not currently know of SID given in connect descriptor异常
    查看>>
    ORA-12514: TNS:listener does not currently know of service问题原因
    查看>>
    ora-12541:tns:no listener
    查看>>
    【docker知识】联合文件系统(unionFS)原理
    查看>>
    ORACEL学习--理解over()函数
    查看>>
    ORAchk-数据库健康检查
    查看>>
    oracle 10g crs命令,Oracle 10g CRS安装问题解决一例
    查看>>
    Oracle 10g ORA-01034: ORACLE not available 错误
    查看>>
    oracle 10g的安装配置
    查看>>