事物的四大特性:
原子性:
事務結束的時候,事務中的所有任務必須全部成功完成,否則全部失敗,事務回滾到事務開始之間的狀態。
一致性:
即資料庫中的所有資料和現實保持一致。如果事務失敗資料必須返回到事務執行之前的狀態,反之修改資料和現實的同步。
隔離性:
每個事務必須與其他事務的執行結果隔離開,直到該事務執行完畢,它保證了事務的訪問的任何資料不會受其他事務執行結果的影響
永續性:
如果事務成功執行,無論系統發生任何情況,事務的永續性都必須保證事務的執行結果是永久的。
事物的傳播行為(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事務有兩種方式 程式設計式事務管理 宣告式事務管理 ...