Spring事务失效的场景

176 阅读1分钟

1. 数据库引擎不支持事务

例如MySQL数据库中,MyISAM引擎是不支持事务操作的,InnoDB才是支持事务的引擎。

2.没有被 Spring 管理

当类未被Spring管理时,事务不生效。

3.方法不是 public的

4.自身调用问题

上层开启了事务,下层也开启事务,下层事务不生效。

5.数据源没有配置事务管理器

6.不支持事务

事务注解里配置了不支持事务 
@Transactional(propagation = Propagation.NOT_SUPPORTED)

7.异常被吃了

代码里面catch异常,不抛出,导致事务不生效。

8.异常类型错误

事务回滚默认是运行时异常,抛出异常类型不对,要处理其他异常需要加注解
@Transactional(rollbackFor = Exception.class)
这个配置仅限于 Throwable 异常类及其子类。