1.簡單回顧Java Exception
該圖摘自:https://blog.csdn.net/zhangerqing/article/details/8248186
一方面,我們可以將異常分為運行時異常(RuntimeException)和非運行時異常(Exception中除了RuntimeException及其子類以外的)。另一方面,我們可以將異常分為受控異常(checked exceptions)和不受控異常(unchecked exceptions)。
受控異常(checked exceptions):就是非運行時異常,即Exception中除了RuntimeException及其子類以外的。
不受控異常(unchecked exceptions):RuntimeException和Error。
2.、rollbackFor屬性介紹
作者開發時遇到兩個疑問:1.已注解了@Transactional的事務仍會有“出現異常事務不回滾”的情況?例如mybatis的xml配置<selectKey>標簽錯誤時,運行報異常,但仍然能夠進行增加操作。2.Java阿里巴巴規范提示,事務需要進行手動回滾。為什么?
因此,經作者百度后,得知如下原因:
Spring框架的事務管理默認地只在發生不受控異常(RuntimeException和Error)時才進行事務回滾。也就是說,當事務方法拋出受控異常(Exception中除了RuntimeException及其子類以外的)時不會進行事務回滾。
rollbackFor屬性在這里就可以發揮它的作用了!
在類或方法前注解配置@Transactional(rollbackFor=Exception.class)就可以實現:
當發生受控異常(checked exceptions)時,事務也進行回滾。
“rollbackFor”相關知識摘自:https://blog.csdn.net/qq_16605855/article/details/79653282