前言
在使用spring过程中事务是被经常用的,如果不小心或者认识不做,事务可能会失效。下面列举几条
业务代码没有被Spring 容器管理
看下面图片类=没有Componet 或者Service 注解。
方法不是public的
@Transactional 注解只能用户public上,否则事务会失效。
发生内部自身调用
没有配置事务管理器
在代码中使用try catch 导致异常没有被抛出
代码中try catch 抛出的异常类型不对
因为 Spring 默认回滚的是 RuntimeException 异常,和程序抛出的 Exception 异常不匹配,所以事务也是不生效的。如果要触发默认 RuntimeException之外异常的回滚,则需要在 @Transactiona事务注解上指定异常类,需要在事务注解类上新增如下设置
Transactional(rollbackFor = Exception.class)。
##总结
以上几点都是事务不起作用的情况,当然事务生效还要一个最基本的前提,那就是数据库本身要支持事务。一些低版本的数据可能不支持