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

    你可能感兴趣的文章
    Nginx配置——不记录指定文件类型日志
    查看>>
    nginx配置一、二级域名、多域名对应(api接口、前端网站、后台管理网站)
    查看>>
    Nginx配置代理解决本地html进行ajax请求接口跨域问题
    查看>>
    nginx配置全解
    查看>>
    Nginx配置参数中文说明
    查看>>
    nginx配置域名和ip同时访问、开放多端口
    查看>>
    Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
    查看>>
    Nginx配置如何一键生成
    查看>>
    Nginx配置实例-负载均衡实例:平均访问多台服务器
    查看>>
    Nginx配置文件nginx.conf中文详解(总结)
    查看>>
    Nginx配置负载均衡到后台网关集群
    查看>>
    ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名
    查看>>
    NHibernate学习[1]
    查看>>
    NHibernate异常:No persister for的解决办法
    查看>>
    NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
    查看>>
    NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
    查看>>