这个为什么能回滚?异常都不一样
这个为什么能回滚?异常都不一样
这个为什么能回滚?异常都不一样
1.这个原因是因为Spring默认会catch到RuntimeException和Error级别的异常,因为你指定的异常是ArithmeticException,而抛出的异常时NullPoint,它并不是ArithmeticException的子类,所以会被Runtime级别的异常catch到,依旧回滚
org.springframework.transaction.interceptor.DefaultTransactionAttribute
@Override
public boolean rollbackOn(Throwable ex) {
return (ex instanceof RuntimeException || ex instanceof Error);
}
2.但是如果抛出的是Exception,那么只写指定的异常都不能catch到它,就不会回滚
@Transactional(rollbackFor = ArithmeticException.class)
public void saveFooOne() throws Exception{
jdbcTemplate.update("INSERT INTO FOO (BAR) VALUES (?)", "rollback");
throw new Exception();
}
空指针异常,他本来就是运行时异常,@Transactional注解spring会回滚所有的运行时异常及其子类异常
noRollbackFor 参数为不会导致事务回滚的异常类数组
你是需要这个吧