事务回滚时的异常处理机制

一、Java异常

1.运行时异常和非运行时异常

(1)运行时异常特点是Java编译器不会检查它;

(2) 非运行时异常 (编译期异常):如果不处理,程序就不能编译通过。如IOException、SQLException;

二、使用事务时对异常的处理

1.声明式事务只对运行期异常RuntimeException做rollback,特殊情况下需要对编译器异常转换为运行期异常。

2.spring事务异常回滚:捕获异常不抛出就不会回滚。

spring aop  异常捕获原理:被拦截的方法需显式抛出异常,并不能经任何处理,这样aop代理才能捕获到方法的异常,才能进行回滚,默认情况下aop只捕获runtimeexception的异常,但可以通过以下2种方法进行处理。

(1)在catch语句中最后增加throw new RuntimeException()语句,以便让aop捕获异常再去回滚;

(2)手动回滚:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
   

你可能感兴趣的:(项目框架)