1. 程式人生 > >捕獲異常拋出事務不回滾

捕獲異常拋出事務不回滾

ren nsa 捕獲 需要 其他 run 模式 runtime 沒有

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

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

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

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

解決方法:

1.

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

2.

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

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

  

捕獲異常拋出事務不回滾