Spring核心之事務管理

2021-08-15 19:10:52 字數 3260 閱讀 9503

事務的特性

併發事務帶來的問題

隔離級別

在mysql常用的儲存引擎中, 只有innodb支援事務, 所以這裡說的隔離級別指的是innodb下的事務隔離級別.

隔離級別

讀資料一致性

更新丟失

髒讀不可重複讀

幻讀讀未提交

最低級別, 只能保證不讀取物理上損壞的資料×√

√√讀已提交

語句級××√

√可重複讀

事務級×××

×可序列化

最高端別, 事務級××

××下面是spring事務註解的源**, 從中可以看到spring事務管理的四個屬性: propagation, isolation, timeout, readonly.

@target()

@retention(retentionpolicy.runtime)

@inherited

@documented

public @inte***ce transactional ;

string rollbackforclassname() default {};

class<? extends throwable> norollbackfor() default {};

string norollbackforclassname() default {};

}

事務傳播行為

public enum propagation 

public int value()

}

事務傳播行為是指方法之間事務的傳播. 比如, 在方法a中呼叫了方法b:

事務隔離級別

public enum isolation 

public int value()

}

其中 default 表示使用資料庫的隔離級別.

事務超時

為了解決事務執行時間太長, 消耗太多資源的問題, 我們可以給事務設定乙個超時時間, 如果事務執行時間超過了超時時間, 就回滾事務.

唯讀事務

一些不需要事務的方法, 比如讀取資料, 就可以設定為唯讀事務, 這樣可以有效地提高一些效能.

spring使用 transactiontemplate 事務模板來管理事務.

(1)dao層

public inte***ce accountdao 

public class accountdaoimpl extends jdbcdaosupport implements accountdao

public void in(string inner, integer money)

}

(2)service層

public inte***ce accountservice 

public class accountserviceimpl implements accountservice

public void settransactiontemplate(transactiontemplate transactiontemplate)

public void transfer(final string outer, final string inner, final integer money)

});}

}

(3)spring配置

(4)測試**

@test

public void demo()

(1)service層

public inte***ce accountservice 

public class accountserviceimpl implements accountservice

public void transfer(string outer, string inner, integer money)

}

(2)spring配置檔案

propagation_required,isolation_default

(3)測試**

@test

public void demo()

基於xml配置

(1)service層

public inte***ce accountservice 

public class accountserviceimpl implements accountservice

public void transfer(string outer, string inner, integer money)

}

(2)spring配置檔案

(3)測試**

@test

public void demo()

基於註解

(1)service層

@transactional(propagation = propagation.required, isolation = isolation.default)

public class accountserviceimpl implements accountservice

//或者 @transactional(propagation = propagation.required, isolation = isolation.default)

public void transfer(string outer, string inner, integer money)

}

(2)spring配置檔案

(3)測試**

@test

public void demo()

Spring之事務管理

spring事務管理高層抽象主要包括3個介面 1.platformtransactionmanager 事務管理器 實現類 datasourcetransactionmanager 使用spring jdbc或ibatis進行持久化資料時使用 實現類 hibernatetransactionmana...

spring之事務管理

spring對事務的管理,有兩種方式,分別是程式設計式事務和宣告式事務,常用的是宣告式的事務,採用宣告式的事務包括配置檔案的方式和註解的配置方式 1採用配置檔案的方式 1.1類 public class user public class userdao 增加錢 public void addmon...

Spring 學習筆記之事務管理

一 事務的特性 事務有四個特性 原子性 一致性 隔離性和永續性。二 spring事務管理只要包括的三個介面 1 platform transactionmanager 事務管理器 2 transactiondefinition 事務的定義資訊 隔離 傳播 超時 唯讀 3 transactionsta...