一、结论
Spring的事务管理默认只对出现运行期异常(java.lang.RuntimeException及其子类)进行回滚。
如果一个方法抛出Exception或者Checked异常,Spring事务管理默认不进行回滚。
关于异常的分类请参看本博客的《Java异常分类》http://blog.youkuaiyun.com/woshixuye/article/details/8230407
二、改变默认方式
在@Transaction注解中定义noRollbackFor和RollbackFor指定某种异常是否回滚。
@Transaction(noRollbackFor=RuntimeException.class)
@Transaction(RollbackFor=Exception.class)
这样就改变了默认的事务处理方式。
三、启示
这就要求我们在自定义异常的时候,让自定义的异常继承自RuntimeException,这样抛出的时候才会被Spring默认的事务处理准确处理。
本文探讨了Spring的事务管理默认行为,仅对运行期异常进行回滚,并介绍了如何通过@Transaction注解自定义异常处理策略,确保自定义异常被正确处理。
714

被折叠的 条评论
为什么被折叠?



