Spring事务不生效的5个场景

1.非 public 修饰的方法

当 @Transactional 修饰的方法为非 public 时,事务就失效了,比如以下代码当遇到异常之后,不能自动实现回滚:
Spring事务不生效的5个场景_第1张图片
此时表显示这条记录更新为0.31了,事务失效
Spring事务不生效的5个场景_第2张图片
同理,方法用final或statsic修饰,事务也是不生效的,因为在它的代理类中,就无法重写该方法,而添加事务功能

2.timeout 超时

当在 @Transactional 上,设置了一个较小的超时时间时,如果方法本身的执行时间超过了设置的 timeout 超时时间,那么就会导致本来应该正常更新数据的方法执行失败,示例代码如下:
Spring事务不生效的5个场景_第3张图片
正常应该更新为0.31,但是由于事务超时,导致没有更新成功,如下所示:
在这里插入图片描述

3.代码中有 try/cat

你可能感兴趣的:(spring,java,数据库)