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