Spring事務管理只對出現執行期異常進行回滾

2021-08-04 05:28:48 字數 1052 閱讀 3601

使用spring難免要用到spring的事務管理,要用事務管理又會很自然的選擇宣告式的事務管理,在spring的文件中說道,spring宣告式事務管理預設對非檢查型異常和執行時異常進行事務回滾,而對檢查型異常則不進行回滾操作。

那麼什麼是檢查型異常什麼又是非檢查型異常呢?

最簡單的判斷點有兩個:

1.繼承自runtimeexception或error的是非檢查型異常,而繼承自exception的則是檢查型異常(當然,runtimeexception本身也是exception的子類)。

2.對非檢查型類異常可以不用捕獲,而檢查型異常則必須用try語句塊進行處理或者把異常交給上級方法處理總之就是必須寫**處理它。所以必須在service捕獲異常,然後再次丟擲,這樣事務方才起效

。結論:

在spring的事務管理環境下,使用unckecked exception可以極大地簡化異常的處理,只需要在事務層宣告可能丟擲的異常(這裡的異常可以是自定義的unckecked exception體系),在所有的中間層都只是需要簡單throws即可,不需要捕捉和處理,直接到最高層,比如ui層再進行異常的捕捉和處理

在service類前加上@transactional,宣告這個service所有方法需要事務管理。每乙個業務方法開始時都會開啟乙個事務。

spring預設情況下會對執行期例外(runtimeexception)進行事務回滾。這個例外是unchecked

如果遇到checked意外就不回滾。

如何改變預設規則:

1 讓checked例外也回滾:在整個方法前加上 @transactional(rollbackfor=exception.class)

2 讓unchecked例外不回滾: @transactional(notrollbackfor=runtimeexception.class)

3 不需要事務管理的(只查詢的)方法:@transactional(propagation=propagation.not_supported)

注意:如果異常被try{}catch{}了,事務就不回滾了,如果想讓事務回滾必須再往外拋try{}catch{throw exception}。

Spring事務管理只對出現執行期異常進行回滾

使用spring難免要用到spring的事務管理,要用事務管理又會很自然的選擇宣告式的事務管理,在spring的文件中說道,spring宣告式事務管理預設對非檢查型異常和執行時異常進行事務回滾,而對檢查型異常則不進行回滾操作。那麼什麼是檢查型異常什麼又是非檢查型異常呢?最簡單的判斷點有兩個 1.繼承...

Spring事務管理只對出現執行期異常進行回滾

原文 使用spring難免要用到spring的事務管理,要用事務管理又會很自然的選擇宣告式的事務管理,在spring的文件中說道,spring宣告式事務管理預設對非檢查型異常和執行時異常進行事務回滾,而對檢查型異常則不進行回滾操作。那麼什麼是檢查型異常什麼又是非檢查型異常呢?最簡單的判斷點有兩個 1...

Spring事務管理

spring是ssh中的管理員,負責管理其它框架,協調各個部分的工作。今天一起學習一下spring的事務管理。spring的事務管理分為宣告式跟程式設計式。宣告式就是在spring的配置檔案中進行相關配置 程式設計式就是用註解的方式寫到 裡。下面先說宣告式 spring配置檔案中關於事務配置總是由三...