*程式設計式事務使用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...