Spring事務管理及事務傳播行為

2022-09-13 04:00:13 字數 2231 閱讀 1705

大家所了解的事務transaction,它是一些列嚴密操作動作,要麼都操作完成,要麼都回滾撤銷。spring事務管理基於底層資料庫本身的事務處理機制。資料庫事務的基礎,是掌握spring事務管理的基礎。這篇總結下spring事務。

事務具備acid四種特性,acid是atomic(原子性)、consistency(一致性)、isolation(隔離性)和durability(永續性)的英文縮寫。

(1)原子性(atomicity)

事務最基本的操作單元,要麼全部成功,要麼全部失敗,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被回滾到事務開始前的狀態,就像這個事務從來沒有執行過一樣。

(2)一致性(consistency)

事務的一致性指的是在乙個事務執行之前和執行之後資料庫都必須處於一致性狀態。如果事務成功地完成,那麼系統中所有變化將正確地應用,系統處於有效狀態。如果在事務**現錯誤,那麼系統中的所有變化將自動地回滾,系統返回到原始狀態。

(3)隔離性(isolation)

指的是在併發環境中,當不同的事務同時操縱相同的資料時,每個事務都有各自的完整資料空間。由併發事務所做的修改必須與任何其他併發事務所做的修改隔離。事務檢視資料更新時,資料所處的狀態要麼是另一事務修改它之前的狀態,要麼是另一事務修改它之後的狀態,事務不會檢視到中間狀態的資料。

(4)永續性(durability)

指的是只要事務成功結束,它對資料庫所做的更新就必須永久儲存下來。即使發生系統崩潰,重新啟動資料庫系統後,資料庫還能恢復到事務成功結束時的狀態。

事務傳播行為就是多個事務方法呼叫時,如何定義方法間事務的傳播。spring定義了7中傳播行為:

(1)propagation_requierd:如果當前沒有事務,就新建乙個事務,如果已存在乙個事務中,加入到這個事務中,這是spring預設的選擇。

(2)propagation_supports:支援當前事務,如果沒有當前事務,就以非事務方法執行。

(3)propagation_mandatory:使用當前事務,如果沒有當前事務,就丟擲異常。

(4)propagation_required_new:新建事務,如果當前存在事務,把當前事務掛起。

(5)propagation_not_supported:以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。

(6)propagation_never:以非事務方式執行操作,如果當前事務存在則丟擲異常。

(7)propagation_nested:如果當前存在事務,則在巢狀事務內執行。如果當前沒有事務,則執行與propagation_required類似的操作。

(1)read uncommited:是最低的事務隔離級別,它允許另外乙個事務可以看到這個事務未提交的資料。

(2)read commited:保證乙個事物提交後才能被另外乙個事務讀取。另外乙個事務不能讀取該事物未提交的資料。

(3)repeatable read:這種事務隔離級別可以防止髒讀,不可重複讀。但是可能會出現幻象讀。它除了保證乙個事務不能被另外乙個事務讀取未提交的資料之外還避免了以下情況產生(不可重複讀)。

(4)serializable:這是花費最高代價但最可靠的事務隔離級別。事務被處理為順序執行。除了防止髒讀,不可重複讀之外,還避免了幻象讀

(5)髒讀、不可重複讀、幻象讀概念說明:

a.髒讀:指當乙個事務正字訪問資料,並且對資料進行了修改,而這種資料還沒有提交到資料庫中,這時,另外乙個事務也訪問這個資料,然後使用了這個資料。因為這個資料還沒有提交那麼另外乙個事務讀取到的這個資料我們稱之為髒資料。依據髒資料所做的操作肯能是不正確的。

b.不可重複讀:指在乙個事務內,多次讀同一資料。在這個事務還沒有執行結束,另外乙個事務也訪問該同一資料,那麼在第乙個事務中的兩次讀取資料之間,由於第二個事務的修改第乙個事務兩次讀到的資料可能是不一樣的,這樣就發生了在乙個事物內兩次連續讀到的資料是不一樣的,這種情況被稱為是不可重複讀。

c.幻象讀:乙個事務先後讀取乙個範圍的記錄,但兩次讀取的紀錄數不同,我們稱之為幻象讀(兩次執行同一條 select 語句會出現不同的結果,第二次讀會增加一資料行,並沒有說這兩次執行是在同乙個事務中)

4、事務幾種實現方式

(1)程式設計式事務管理對基於 pojo 的應用來說是唯一選擇。我們需要在**中呼叫begintransaction()、commit()、rollback()等事務管理相關的方法,這就是程式設計式事務管理。

(2)基於 transactionproxyfactorybean的宣告式事務管理

(3)基於 @transactional 的宣告式事務管理

(4)基於aspectj aop配置事務

Spring事務管理 事務的傳播行為

1 簡介 當事務方法被另乙個事務方法呼叫時,必須指定事務應該如何傳播。例如 方法可能繼續在現有事務中執行,也可能開啟乙個新事務,並在自己的事務中執行。事務的傳播行為可以由傳播屬性指定。spring定義了 7種類傳播行為。如下圖所示 2 傳播屬性的定義 事務的傳播屬性可以再 transactional...

Spring事務管理

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

spring事務管理

一 xml配置事務 二 註解的方式配置事務 bean id txmanaager class org.springframework.orm.hibernate3.hibernatetransactionmanager property name sessionfactory ref session...