1. 程式人生 > >spring 宣告式事務配置,丟擲runtimeException異常不回滾

spring 宣告式事務配置,丟擲runtimeException異常不回滾


預設spring只在發生未被捕獲的runtimeexcetpion時才回滾。

最容易解決的辦法:程式碼級控制:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

try{
...
}catch(Exception e){
   log.error(e.getMessage(),e);
   TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
   throw new RuntimeException( e.getMessage(), e );
  } 

 但這不是從根本上解決問題。為什麼不加這句丟擲runtimeException異常不回滾呢

看看自己的程式碼是不是最後寫了

finally{

return ...

}

 如果這樣寫,即使手動丟擲runtimeException也不會回滾了,具體原因可參見