如果你用過spring aop,那麼理解註解事務就十分簡單了。事務註解本質上實在事務方法加入乙個around切面,在方法開始前開始事務,在丟擲異常後回滾事務。使用簡單偽**可以簡單理解為
dowithtransaction(...)catch(exception ex)
}
spring transaction有各種事務傳播性,歸根到底就是當前是新開事務還是使用已有事務(或者是拋異常)。其實很簡單,使用乙個threadlocal來記錄下當前事務狀態(是否在事務中),改造一下上面的方法
dowithtransaction(...)catch(exception ex)
curtransaction.commit();
//事務提交
}else
catch
(exception ex)
curtransaction.commit();
//事務提交
oldtransaction.resume()
}else
}}
其實就再catch住異常以後,判斷下當前異常是否需要回滾。
trycatch
(exception ex)
throw
ex}
上面偽**雖然簡單,但spring註解事務的基本原理基本就是這樣
platformtransactionmanager(及其抽象abstractplatformtransactionmanager),其實是transactioninterceptor中的乙個重要屬性,主要功能是,建立乙個事務,提交事務,回滾事務等操作。我們再配置spring的時候都會建立,例如常見的datasourcetransactionmanager,。
transactioninterceptor(及其父類transactionaspectsupport)儲存類當前執行緒的事務狀態,transactioninterceptor是在呼叫事務方法中實際進入的入口:
根據當前註解內容,選擇事務管理器(platformtransactionmanager)
會根據當前執行緒事務狀態,是建立新事務還是使用已有事務。
Spring事務實現方式
1.一種是使用xml實現事務 開發基本不用 transactional的所有可選屬性 propagation 用於設定事務傳播屬性。該屬性型別為 propagation 列舉,預設值為 propagation.required。isolation 用於設定事務的隔離級別。該屬性型別為 isolati...
MySQL事務實現原理
以上是sql 92標準中定義的四種隔離級別。在mysql中,預設的隔離級別是repeatable read 可重複讀 並且解決了幻讀問題。不可重複讀重點在於update和delete,而幻讀的重點在於insert insert update delete 快照讀和當前讀 鎖定讀一致性非鎖定讀假如乙個...
Spring的事務實現原理與傳播機制
1 在要開啟事務的方法上加 transactional註解 2 此時spring就會使用aop的思想,對你的這個方法在執行之前,先去開啟事務,執行完畢之後根據方法是否報錯,決定回滾或者提交事務。1 事務傳播機制的概念,如 transactional propagation propagation.r...