> 文档中心 > spring事务什么时候失效?什么时候不会进行回滚?

spring事务什么时候失效?什么时候不会进行回滚?

在这里插入图片描述

1、访问权限问题

非public权限

2、方法用final修饰

spring事务基于AOP,方法被final修饰后不能被重写

3、方法内部使用
public void add(Dto dto){    insert(dto);    update(dto);}@Transtional()public void update(){}

update相当于this调用,不会被重写

4、未被spring管理
5、多线程调用

spring的事务是在一个连接中,而连接是存在ThreadLocal中,多线程的会就会出现问题

6、表不支持事务

如Myasim

7、错误的传播特性
8、自己吞了异常

在catch中不抛出异常

try{   .....}catch(Exception e){   log.error(e.getMessage());}
9、手动抛了别的异常

spring默认情况下只会对RuntimeException和Error进行回滚,不会对普通的Exception进行回滚

10、自定义回滚异常
@Transactional(rollbackFor = BusinessException.class)public void add(Dto dto){    inser(dto);}

当发生BusinessException进行回滚,但是当发生其他异常如SqlException就不会进行回滚