Spring中事務的屬性(藏)

2021-08-24 23:00:47 字數 1523 閱讀 3520

spring 中事務的屬性

1.傳播行為

定義了關於客戶端和被呼叫方法的事務邊界。傳播規則就是在說明新的事務是否要被啟動或是掛起,或者方法是否要在事務環境中執行。

spring定義了7種不同的傳播行為。

1)propagation_mandatory

表明方法必須要在事務中執行。如果事務不存在,丟擲異常

2)propagation_nested

表示如果當前已經存在乙個事務,則該方法應當執行在乙個巢狀的事務中。被巢狀的事務可以從當前事務中單獨地提交或回滾。如果當前事務不存在,就相當於propagation_required

3)propagation_never

表示當前的方法不應該執行在乙個事務上下文中。如果當前存在乙個事務,則會丟擲乙個異常。

4)propagation_not_supported

表示該方法不應該在事務中執行。如果乙個現有的事務正在執行中。它將在該方法的執行期間被掛起

5)propagation_required

表示當前方法必須執行在乙個事務中。如果乙個現有的事務正在執行中,該方法將執行在這個事務中。否則的話,就要開始乙個新的事務。

6)propagation_requires_new

表示當前方法必須執行在它自己的事務中。如果乙個現有事務在執行的話,將在這個方法執行期間被掛起。

7)propagation_supports

表示當前方法不需要事務處理環境,但如果有乙個事務已經在執行的話,這個方法也可以在這個事務中執行

2.隔離級別

多個事務併發執行的關係。因為併發會導致以下問題

.髒讀(dirty read) 乙個事務讀取了被另乙個事務改寫但還沒提交的資料。

.不可重複讀(nonrepeatable read) 乙個事務執行相同的查詢兩次或兩次以上,但每次查詢結果都不同時。這由於另乙個併發事務在兩次查詢之間更新了資料

.幻讀(phantom read)

當乙個事務讀取幾行記錄後,另乙個併發事務插入一些記錄,就發生了幻讀

spring定義了以下5種隔離關係

1)isolation_default

使用後端資料庫預設得隔離級別

2)isolation_read_uncommitted

允許你讀取還未提交的改變了的資料。可能導致髒讀,不可重複讀,幻讀

3)isolation_read_committted

執行在併發事務已經提價後讀取。可防止髒讀,但不可重複讀,幻讀都有可能發生

4)isolation_repeatable_read

對相同欄位的多次讀取結果是一致的,除非資料被事務本身。可防止髒讀,不可重複讀,但幻讀仍可能發生。

5)isolation_serializable

完全服從acid的隔離級別,確保不發生髒讀,不可重複讀,幻讀。它的典型做法就是完全鎖定在事務中涉及的資料表。因此它是最慢地。

3.唯讀提示

通過唯讀屬性,資料庫可以對事務進行優化。

4.事務超時時間

設定了的話,事務在超過這個時間後就自動回滾。避免占用資源過久。

Spring的事務屬性

在transactiondefinition介面中定義了五個不同的事務隔離級別 引用巢狀事務乙個非常重要的概念就是內層事務依賴於外層事務。外層事務失敗時,會回滾內層事務所做的動作。而內層事務操作失敗並不會引起外層事務的回滾。propagation requires new 和 propagation...

spring事務的屬性

事務屬性的種類 傳播行為 隔離級別 唯讀和事務超時 a 傳播行為定義了被呼叫方法的事務邊界。傳播行為 意義 propergation mandatory 表示方法必須執行在乙個事務中,如果當前事務不存在,就丟擲異常 propagation nested 表示如果當前事務存在,則方法應該執行在乙個巢狀...

Spring 事務屬性

spring事務機制主要包括宣告式事務和程式設計式事務,此處側重講解宣告式事務,程式設計式事務在實際開發中得不到廣泛使用,僅供學習參考。spring宣告式事務讓我們從複雜的事務處理中得到解脫。使得我們再也無需要去處理獲得連線 關閉連線 事務提交和回滾等這些操作。再也無需要我們在與事務相關的方法中處理...