捕獲異常拋出事務不回滾


方法名上加注解事務 @Transactional 使用注解的簡單模式,報錯會回滾,但是如果方法中捕獲異常后手動拋出異常,事務並沒有回滾。

默認spring事務只在發生未被捕獲的 RuntimeException 時才回滾。  

spring aop  異常捕獲原理:被攔截的方法需顯式拋出異常,並不能經任何處理,這樣aop代理才能捕獲到方法的異常,才能進行回滾,默認情況下aop只捕獲

RuntimeException 的異常,但可以通過配置來捕獲特定的異常並回滾。

解決方法:

1.

在catch中拋出異常時拋出異常類型為 RuntimeException  ,經測試 Exception 確實不可以回滾。

2.

如果catch中有其他需要不可以拋出 RuntimeException  ,可以手動回滾事務:

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

  


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com