spring事務回滾異常問題總結


UnexpectedRollbackException:

分析原文:http://m.blog.csdn.net/article/details?id=51214266

總結原因:

以下兩種情況同時出現(內層事務由spring設置回滾,但外層事務不回滾),則全部回滾並拋出異常:UnexpectedRollbackException:transaction rolled back because it has been marked as rollback-only

1.嵌套事務中(設置事務合並屬性propagation="REQUIRED"),里層異常事務回滾,spring會設置 isrollbackonly = true 狀態。

2.如果外層事務不設置回滾參數(如rollback-for="Exception”),則默認RuntimeException異常時外層才回滾,但是程序拋出其它異常(如ServiceException等),則外層事務不回滾。或外層處理了異常,則外層事務也不回滾。總之外層不回滾。

 

避免方法:外層事務設置 rollback-for="Exception”,所有異常都回滾。

 

備注:

propagation="REQUIRED”的含義是,支持當前已經存在的事務,如果還沒有事務,就創建一個新事務。假設調用前不存在任何事務,那么執行時會自動開啟一個事務。而由aMethod調用bMethod時,由於事務已經存在,因此會使用已經存在的事務(也就是執行aMethod之前創建的那個事務)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM