spring事務管理高層抽象主要包括3個介面
1. platformtransactionmanager 事務管理器
實現類 datasourcetransactionmanager 使用spring jdbc或ibatis進行持久化資料時使用
實現類 hibernatetransactionmanager 使用了 hibernate 進行持久化資料時使用
2.transactiondefinition 事務的定義資訊
1.事務的隔離級別(isolation)
髒讀: 乙個事務讀取了另乙個事務改寫但還未提交的資料,如果這些資料被回滾,則讀取的這些資料是無效的
不可重複讀: 在同一事務中,多次讀取同一資料返回的結果不同
幻讀: 乙個事務讀取了幾行記錄後,另乙個事務插入資料,在後來的查詢中,第乙個事務就會發現部分之前沒有的記錄
為了避免以上問題,可設定事務的隔離級別
隔離級別:read_uncommited 級別最低,允許讀取還未提交的但改變了的資料
read_committed 事務提交後才能讀取,可防止髒讀 oracle預設
repeatable_read 對相同欄位的多次讀取一致 可防止 髒讀和不可重複讀 mysql 預設
serializable 完全服從acid的隔離級別,事務按佇列進行,不可能併發。執行速度也最慢
spring 中還可以設定 default 相當於使用的資料庫的預設選擇
2.事務的傳播行為(propagation)
主要介紹3種
1.propagation_required 同乙個業務邏輯中執行的所有方法都放在乙個事務中。
2.propagation_requires_new 同乙個業務邏輯中執行的所有方法都放在各自的事務中。
3.propagation_nested 同一業務邏輯中執行的所有方法裡可以設定乙個儲存點,可以控制回滾的位置
3.事務具體執行狀態 (可以獲取事務的屬性)
1.程式設計式事務管理
在需要進行事務管理的service中使用 transactiontemplate (spring 事務管理的模板)
transactiontemplate依賴datasourcetransactionmanager(事務管理器的實現類)
datasourcetransactionmanager依賴datasource(需要資料庫連線池才能獲得連線,對事務進行管理)構造
在service中執行 transactiontemplate.execute(new transactioncallbackwithoutresult()) 即可
此方法過於笨重.
2.宣告式事務管理 符合aop思想
1.基於transactionproxyfactorybean 方式 每個要進行事務管理的類 都需要 (一次配置只能針對乙個類,較繁瑣,一般不採用)
2.基於aspectj的xml方式
aspectj是乙個面向切面的框架
這樣就可以讓所有的service中的方法在 異常時進行回滾了
3.基於註解方式
處理的更有針對性,可以方便其他程式設計師閱讀,能知道這個類或者方法使用了事務,使用時得有一些注意事項
在需要事務的業務層類,或者方法上新增乙個@transactional的註解 即可
@transactional(propagation = propagation.required,isolation = isolation.default,readonly = true)
spring之事務管理
spring對事務的管理,有兩種方式,分別是程式設計式事務和宣告式事務,常用的是宣告式的事務,採用宣告式的事務包括配置檔案的方式和註解的配置方式 1採用配置檔案的方式 1.1類 public class user public class userdao 增加錢 public void addmon...
Spring核心之事務管理
事務的特性 併發事務帶來的問題 隔離級別 在mysql常用的儲存引擎中,只有innodb支援事務,所以這裡說的隔離級別指的是innodb下的事務隔離級別.隔離級別 讀資料一致性 更新丟失 髒讀不可重複讀 幻讀讀未提交 最低級別,只能保證不讀取物理上損壞的資料 讀已提交 語句級 可重複讀 事務級 可序...
Spring 學習筆記之事務管理
一 事務的特性 事務有四個特性 原子性 一致性 隔離性和永續性。二 spring事務管理只要包括的三個介面 1 platform transactionmanager 事務管理器 2 transactiondefinition 事務的定義資訊 隔離 傳播 超時 唯讀 3 transactionsta...