事務的理解與spring中的一些配置

2021-09-01 13:58:42 字數 2193 閱讀 8961

事物的四大特性:

原子性:

事務結束的時候,事務中的所有任務必須全部成功完成,否則全部失敗,事務回滾到事務開始之間的狀態。 

一致性:

即資料庫中的所有資料和現實保持一致。如果事務失敗資料必須返回到事務執行之前的狀態,反之修改資料和現實的同步。 

隔離性:

每個事務必須與其他事務的執行結果隔離開,直到該事務執行完畢,它保證了事務的訪問的任何資料不會受其他事務執行結果的影響

永續性:

如果事務成功執行,無論系統發生任何情況,事務的永續性都必須保證事務的執行結果是永久的。 

事物的傳播行為(7種):

*propagation_mandatory: 

規定了方法必須在事務中執行,否則會丟擲異常 

*propagation_nested: 

使方法執行在巢狀事務中,否則這個屬性和propagation_required屬性的義相同 

propagation_never 

使當前方法永遠不在事務中執行,否則丟擲異常 

propagation_not_supported 

定義為當前事務不支援的方法,在該方法執行期間正在執行的事務會被暫停 

*propagation_required 

規定當前的方法必須在事務中,如果沒有事務就建立乙個新事務,乙個新事務和方法一同開始,隨著方法的返回或丟擲異常而終止 

*propagation_required_new 

當前方法必須建立新的事務來執行,如果現存的事務正在執行就暫停它 

propagation_supports 

規定當前方法支援當前事務處理,但如果沒有事務在執行就使用非事務方法執行 

例如: 

propagation_required,timeout_5,readonly

propagation_required

propagation_required

事物的隔離級別:

isolation_default         

使用資料庫預設的隔離級別 

isolation_committed     

大多數主流資料庫的預設spring事務隔離等級,保證了乙個事務不會讀到另乙個並行事務已修改但未提交的資料,避免了「髒讀取」。該級別適用於大多數系統。

isolation_read_uncommitted    

保證了讀取過程中不會讀取到非法資料。spring事務隔離級別在於處理多事務的併發問題,這是速度最           快的乙個隔離級別,但同時它的隔離級別也是最低 

isolation_repeatable_read 

保證了乙個事務不會修改已經由另乙個事務讀取但未提交(回滾)的資料。避免了「髒讀取」和「不可重複讀取」的情況,但是帶來了更多的效能損失

isolation_serializable 

這是最高的隔離級別,它可以防此髒讀,不可重複讀和幻讀等問題,但因其侵占式的資料記錄完全鎖定,導致它影響事務的效能,成為隔離級別中最展慢的乙個。 

注意:並不是所有的資源管理器都支援所有的隔離級別,可針對不同的資源管理使用以上的隔離級別

1.5事物的唯讀屬性:

如果將事務宣告為唯讀的,那麼資料庫可以根據事務的特性優化事務的讀取操作。事務的唯讀屬性需要配合事務的傳播行為共同設定。例如: 

propagation_required,readonly

事物的超時屬性:

通過設定事務的超時時間,從開始執行事務起,在規定的超時時間內如果沒有事務就將它回滾。事務的超時屬性以timeout_為字首和乙個整型數字定義,例如: 

propagation_reguired,timeout_5,readonly

1.6事務管理器:

spring的事務管理器有5個,都實現了platformtransactionmanager介面,如下所示: 

datasourcetransactionmanager           jdbc事務管理器 

hibernatetransactionmanager            hibernate事務管理器 

jdotransactionmanager                  jdo事務管理器 

jtatransactionmanager                   jta事務管理器      

persistencebrokertransactionmanager    apache的ojb事務管理器

spring事務的理解與測試

一 對事務的說明和配置 經常使用到spring事務的會知道,一般處理到spring的事務,有三種處理方式 1 程式設計式事務 較繁瑣,適用於處理複雜的業務場景 業務層使用事務模板物件transactiontemplate完成將多個操作製成同一事務,使用execute方法完成。事務模板宣告 priva...

spring 事務的理解

1 spring事務的本質其實就是資料庫對事務的支援 2 spring事務的傳播屬性 propagation required 支援當前事務 如果當前沒有事務,就新建乙個事務。propagation requires new新建事務,如果當前存在事務,把當前事務掛起。propagation supp...

Spring事務(一) Spring事務的使用

事務的經典舉例 某人要在商店使用電子貨幣購買100元的東西,當中至少包括兩個操作 該人賬戶減少100元 商店賬戶增加100元 事務就是要確保以上兩個操作 都能完成 或者 一起取消,否則就會出現100元平白消失或出現的情況。摘自wiki spring事務有兩種方式 程式設計式事務管理 宣告式事務管理 ...