天天看點

Spring事務傳播機制問題Spring事務傳播機制問題

Spring事務傳播機制問題

  • Question:當代碼外層和内層使用Transation注解進行事務操作時,内層操作失敗,抛出

    代碼如下

@Transaction
methodA(){
   try{
       methodB(){
         throw new   Exception(e);
       }
   }catch(Exception e){
     logger.info("處理失敗")!
   }
}
           
  • 出現異常資訊:
javax.servlet.ServletException: org.springframework.web.util.NestedServletException: Request processing failed; 
nested exception is org.springframework.transaction.UnexpectedRollbackException: 
Transaction rolled back because it has been marked as rollback-only
           
  • 出現問題分析:

    當内部方法出錯,導緻内部事務認為應該復原,事務處于復原狀态。向外部方法抛出異常,此時外部直接将異常處理,導緻外部事物認為程式正常,事務可以送出,事務處于送出狀态。此時外部事務和内部事務是同一個事務,是以該事務不知道是送出,還是復原。

  • 解決方法

    1.将事務拆分

    TransactionA-start

    TransactionA-commit

    TransactionB-start

    TransactionB-commit

    2.在cathe中復原事務。

    在cathe中手動調用rollback函數進行失敗復原

繼續閱讀