簡體   English   中英

Spring Transaction:rollbackfor 和 norollbackfor 都定義了

[英]Spring Transaction : rollbackfor and norollbackfor both defined

這是我在必須維護的應用程序中遇到的問題:

我有一個帶有注釋的第一類@Transactional(rollbackFor = CustomExceptionA.class)然后在下面的代碼中我調用了@Transactional(noRollbackFor = CustomExceptionB.class) NB 的方法: CustomExceptionACustomExceptionB只有一個共同的祖先是Exception

當然,當我執行代碼時,會引發異常,該異常既不是CustomExceptionACustomExceptionB類型,也不是它們的子類。

所以問題很簡單:
在這種情況下,交易會發生什么? 它犯了嗎? 是否回滾? 它是否保持未完成狀態,等待應用程序做某事(這實際上是一個答案,可以解釋在這個應用程序中看到的一些丑陋的事情)? 而且:為什么?

Spring Framework 的事務基礎結構代碼默認只會在運行時、未檢查異常的情況下將事務標記為回滾; 也就是說,當拋出的異常是 RuntimeException 的實例或子類時。 (默認情況下,錯誤也會導致回滾。)從事務方法拋出的已檢查異常不會導致事務被回滾。

為什么? 這是一個完美的意義:檢查異常對於處理或拋出是強制性的,所以如果你從事務方法中拋出檢查異常,那么框架假設你知道你在做什么。 如果出現未經檢查的異常,它很可能是錯誤或異常處理缺陷,因此回滾事務以避免數據損壞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM