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

    你可能感兴趣的文章
    node中fs模块之文件操作
    查看>>
    Node中同步与异步的方式读取文件
    查看>>
    Node中的Http模块和Url模块的使用
    查看>>
    Node中自启动工具supervisor的使用
    查看>>
    Node入门之创建第一个HelloNode
    查看>>
    node全局对象 文件系统
    查看>>
    Node出错导致运行崩溃的解决方案
    查看>>
    Node响应中文时解决乱码问题
    查看>>
    node基础(二)_模块以及处理乱码问题
    查看>>
    node安装及配置之windows版
    查看>>
    Node实现小爬虫
    查看>>
    Node提示:error code Z_BUF_ERROR,error error -5,error zlib:unexpected end of file
    查看>>
    Node提示:npm does not support Node.js v12.16.3
    查看>>
    Node搭建静态资源服务器时后缀名与响应头映射关系的Json文件
    查看>>
    Node服务在断开SSH后停止运行解决方案(创建守护进程)
    查看>>
    node模块化
    查看>>
    node环境下使用import引入外部文件出错
    查看>>
    node编译程序内存溢出
    查看>>
    Node读取并输出txt文件内容
    查看>>
    node防xss攻击插件
    查看>>