AOP声明式事物@Transactional失效的几种场景(7种)

一、什么是声明式事物什么是编程式事物?


大白话讲,编程事物就是在代码手动实现事物的回滚,例如try-catch-finally捕获了异常,在finall手动调用方法实现rollback下;声明事物常用的就是AOP实现的切面原理,切入一个@Transactional注解,交给spring自己管理实现,可以被标记在类上、接口、方法上。

二、@Transactional在某些场景下会失效,下边详谈(列举7种)


(1)@Transactional配置的方法非public权限修饰(例如private的就别加了);
(2)@Transactional所在类非Spring容器管理的bean(例如一个Util就别加了,都没注入容器,你叫Spring怎么用他的AOP帮你管理事务?);
(3)@Transactional所在类中,注解修饰的方法被类内部方法调用(例如同一个class类中,方法A调用方法B,只在方法B加了@Transactional注解,那就失效了);
(4)业务代码抛出异常类型非RuntimeException,事务失效

想要Exception都会滚咋办?

设置:@Transactional(rollbackFor = Exception.class)

借一张图展示下:

在这里插入图片描述
(5)业务代码中存在异常时,使用try…catch…语句块捕获,而catch语句块没有throw new RuntimeExecption异常(只有该异常或者他的父异常例如Exception可以回滚);
(6)注解@Transactional中Propagation属性值设置错误(例如Propagation.NOT_SUPPORTED,不过谁会设置这玩意?)
(7)mysql关系型数据库,且存储引擎是MyISAM而非InnoDB,则事务会不起作用(简单来说就是你用的DB压根不支持事物,那就没得谈了);

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值