spring事务回滚3-结论
http://mp.blog.****.net/postedit/79290257
http://mp.blog.****.net/postedit/79290287
通过上面的2篇文章,我总结提到的3种方式关于spring事务回滚的现象,并测试过没问题,便于以后查阅
结论1-针对unchecked exception:
Spring的事务管理默认是针对unchecked exception回滚,也就是默认对Error异常和RuntimeException异常以及其子类进行事务回滚。(若使用try-catch对其异常捕获则不会进行回滚!Error异常和RuntimeException异常抛出时不需要方法调用throws或try-catch语句,其实这句话是废话);
结论2-针对checked异常
spring事务默认对checked异常不进行回滚。如果想spring事务支持,其解决方法有3个。如下:
spring事务支持checked异常---方法1:
在service层包裹try-catch,在catch语句中添加增加throw new RuntimeException()语句即可,即迎合结论1
spring事务支持checked异常---方法2:
在service层包裹try-catch,在catch语句中增加:TransactionAspectSupport.currentTransactionStatus()
.setRollbackOnly();语句,手动回滚
spring事务支持checked异常---方法2:
无需加try-catch,直接在所在的service方法上的@Transactional加上rollbackFor ,形 如:@Transactional(rollbackFor = Exception.class)。
结论3-针对Throwable
spring事务不作为,即无法回滚,解决方法同“结论2”
通过结论3,我们也学到了一个知识,当我们写工具类时,如果出现我们”能处理类型“的”根类型“,应该和“无法处理类型”同等看待,不应该随便选一种”处理类型“来处理,仅代表个人见解