Spring事務管理

2021-07-26 13:02:00 字數 2148 閱讀 6657

事務的api介紹

一、spring事務管理包括三個介面

platformtransactionmanager - 平台事務管理器,真正用來管理事務的介面,包含事務的提交,回滾等資訊

transactiondefinition - 事務定義資訊(隔離級別、傳播行為、是否超時、設定唯讀)

transactionstatus - 事務具體的執行狀態(是否已經提交,是否有儲存點,是不是乙個新的事務等等這些狀態)

關係:首先會根據transactiondefinition事務定義的資訊(比如定義了什麼樣的隔離級別,定義什麼樣的傳播行為),由platformtransactionmanager對事務進行管理,進行事務管理的過程中,事務會產生一些相應的狀態,這些狀態在transactionstatus中

二、platformtransactionmanager 

spring根據不同的持久化框架提供不同 platformtransactionmanager介面實現

1. org.springframework.jdbc.datasource.datasourcetransactionmanager

使用spring jdbc 或ibatis進行持久化資料時使用

2. org.springframework.orm.hibernate3.hibernatetransactionmanager

使用hibernate3.0版本進行持久化資料時使用

三、transactiondefinition

1.事務隔離級別

作用:為了解決髒讀、不可重複讀、幻讀等安全問題

髒讀:乙個事務讀取了另乙個事務改寫但未提交的資料,如果這些資料被回滾,則讀到的資料是無效的

不可重複讀:在同一事務中,多次讀取同一資料返回的結果有所不同

幻讀:乙個事務讀取了幾行記錄後,另乙個事務插入一些記錄,幻讀就發生了。再後來的查詢中,第乙個事務就會發現有些原來沒有的記錄

事務隔離級別(四種):

default    使用後端資料庫預設的隔離級別(spring中的選擇項)

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

read_commited    允許在併發事務已經提交後讀取。可防止髒讀,但是幻讀,不可重複讀仍可發生

repeatable_read    對於相同的字段的多次讀取是一致的,除非資料被事務本身改變。可防止髒讀,不可重複讀,但幻讀仍可能發生。

serializable    完全服從acid的隔離級別,確保不會發生髒,幻,不可重複讀。這在所有的隔離級別中是最慢的,它是典型的通過完全鎖定在事務中涉及的資料表來完成的

mysql預設的隔離級別 repeatable_read

oracle預設的隔離級別 read_commited

2.事務的傳播行為 - 解決業務層的方法之間的相互呼叫的問題(在呼叫方法的過程中,事務是如何傳遞的)

事務的傳播行為有七種,又分為三類:

第一類共同點:如果 a 方法中有事務,則呼叫 b 方法時就用該事務,即:a和b方法在同乙個事務中。

propagation_required:如果 a 方法中沒有事務,則呼叫 b 方法時就建立乙個新的事務,即:a和b方法在同乙個事務中。

propagation_supports:如果 a 方法中沒有事務,則呼叫 b 方法時就不使用該事務。

propagation_mandatory:如果 a 方法中沒有事務,則呼叫 b 方法時就丟擲異常。

第二類共同點:a 方法和 b 方法不在同乙個事務裡面。

propagation_requires_new:如果 a 方法中有事務,則掛起並新建乙個事務給 b 方法。

propagation_not_supported:如果 a 方法中有事務,則掛起。

propagation_never:如果 a 方法中有事務,則報異常。

第三類:如果 a 方法有的事務執行完,設定乙個儲存點,如果 b 方法中事務執行失敗,可以滾回儲存點或初始狀態。

propagation_nested :如果當前事務存在,則巢狀事務執行

重點的三種:propagation_required, propagation_requires_new, propagation_nested

四、transactionstatus

該介面定義了一組方法,用來獲取或判斷事務的相應狀態資訊

Spring事務管理

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

spring事務管理

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

spring 事務管理

和資料庫打交道的碼農都知道事務,事務有4大特徵,分別是原子性,一致性,隔離性,永續性。而spring 對事物提供了良好的支援,和api,通過簡單的配置,則可以減低程式設計師重複的操作。1.原子性 原子性指的是乙個事務內的所有操作要麼全部應用到資料庫,要麼取消對資料庫的操作。2.一致性 一致性和原子性...