1.只有在开启事务的方法中出现异常,才会自动回滚,需要在service的public方法上面加上 @Transactional,一旦程序出现异常,事务会自动回滚。
2.如果在try-catch语句中对可能出现的异常进行了捕获处理,没有再手动throw异常,spring认为该方法成功执行,不会进行回滚。
3.对于2中出现的情况,这时手动throw抛出异常,事务仍会自动回滚或者进行手动回滚
手动回滚:
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
4.默认情况下只会对出现非检测性(unchecked,可大致理解为运行时异常)异常时进行回滚。如果想要对抛出的任何异常都进行自动回滚(而不是只针对RuntimeException),只需要在使用@Transactional(rollbackFor = Exception.class)即可。
5.如果try-catch语句在finally中进行了return操作,那么catch中手动抛出的异常也会被覆盖,同样不会自动回滚,需要手动回滚。