天天看点

Spring的事务管理对何种异常进行回滚

一、结论

spring的事务管理默认只对出现运行期异常(java.lang.runtimeexception及其子类)进行回滚。

如果一个方法抛出exception或者checked异常,spring事务管理默认不进行回滚。

关于异常的分类请参看本博客的《java异常分类》http://blog.csdn.net/woshixuye/article/details/8230407

二、改变默认方式

在@transaction注解中定义norollbackfor和rollbackfor指定某种异常是否回滚。

@transaction(norollbackfor=runtimeexception.class)

@transaction(rollbackfor=exception.class)

这样就改变了默认的事务处理方式。

三、启示

这就要求我们在自定义异常的时候,让自定义的异常继承自runtimeexception,这样抛出的时候才会被spring默认的事务处理准确处理。