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 异常类及其子类。