Spring宣告式事務管理

2021-09-19 11:29:44 字數 1687 閱讀 6438

*程式設計式事務使用transactiontemplate ,是硬編碼

*宣告式事務是基於aop。對指定方法前後進行攔截,在目標方法開始之前建立或加入乙個事務,在執行完目標方法之後根據執行結果提交或者回滾事務。

xml配置檔案

propagation_required

注:在注入service時需要注入**類

//注入**類

//@resource(name = "accountservice")

@resource(name = "accountserviceproxy")

private accountservice accountservice;

配置好後只需要在指定的類或者方法上貼@transactional註解(對public以外的方法是不會起作用的),在用aop切入方法時,方法的型別要設定成public共有型別才會有效!

為了解決併發時產生的 髒讀,不可重複讀,幻讀 產生的。

髒讀事務a讀到了事務b還沒有提交的資料(事務b修改了資料,此時a讀了該資料,b因發生異常回滾,a就讀到了髒資料)

不可重複讀:在乙個事務裡面讀取了兩次某個資料,讀出來的資料不一致(a開啟事務第一次讀到資料後,事務b修改並提交了資料,此時切換回事務a又一次讀取該資料,兩次資料讀取不一致,這就形成了不可重複讀)

幻讀:在乙個事務中兩次查詢返回的記錄數不一致(a事務第一次查詢了n條記錄,此時b事務又新增了新的記錄或刪除記錄,當事務a再次讀取時發現和之前讀取的記錄數不一致)

隔離級別由低到高(spring 通過isolation 屬性配置

1  default  資料庫預設級別           mysql 預設 repeatable_read        oracle預設 read_commited

2  read_uncommitted              可以讀取未提交的資料   會導致 髒讀,不可重複讀,幻讀

3  read_commited                      可以讀取已提交的資料   可以解決髒讀

4  repeatable_read                 第一次讀取時對該資料加鎖在當前事務結束前防止其他事物修改,可解決髒讀,不可重複讀

5  serlalizable                           不管多少事物,只能挨個完成(很少使用)

通過propagation屬性配置

Spring宣告式事務管理

使用事務的目的是將整個業務的邏輯處理置於同乙個事務中,方便對整個業務進行管理,如業務的事務回滾 在編寫 時,為了將乙個業務的核心邏輯處理放入事務中,有時會這樣寫 session session sf.opensession 開啟乙個session session.gettransaction beg...

Spring宣告式事務管理

spring的宣告式事務管理,可以說是開發人員的福音,也是架構師們的法寶 通過這個神器我們可以有效的解決事務不一致 連線洩露等問題 下面我們就介紹一下spring宣告式事務的配置 1 建立事務管理器 2 制定事務管理 3 建立切面 備註 事務管理機制說明propagation 屬性值 require...

Spring宣告式事務管理

classpath hibernate.cfg.xml public class usermanagerimpl extends hibernatedaosupport implements usermanager public void adduser user user throws excep...