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

  • Post author:
  • Post category:其他


在这里插入图片描述



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就不会进行回滚



版权声明:本文为zhangh9172原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。