SpringBoot中事务管理失效的原因

在项目中,service层所有方法需要try catch自行处理运行错误,然后导致无法进行自动的事务管理(Spring的事务管理需要捕获RuntimeException)。

不过有解决方案是在catch里使用 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();进行手动事务回滚(需要在类或方法上添加@Transactional(rollbackFor = Exception.class)),本来到这已经完了,但是某一天在测试某项功能的时候发现回滚功能不好使了,于是在百度和CSDN上度过了一天半。。。。

当你发现回滚功能不好使了的时候检查一下几个要素,毕竟springboot的事务管理就那么点东西,啥都不需要配置的。

  1. 需要进行回滚功能的方法或者类上有没有@Transactional(rollbackFor = Exception.class)
  2. show table status like ‘表名’; 查看表的Engine是不是InnoDB
  3. 也就是我碰到的这个问题,在执行batchUpdate()方法时,sql集合是不是掺杂有DDL语句(CREATE、ALTER、DROP)。
    关于启动类上加@EnableTransactionManagement这个东西的,经过测试,没有必要。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值