背景:最近的專案中需要用到spring的事務管理相關的知識,以前也了解過spring的事務管理,但是僅僅止步於會用,這一次藉著這次機會,深入原始碼分析一下spring是如何實現事務的。前面已經有一篇文章講過了如何在spring中使用宣告式事務,並對一些特性進行了講解,具體如下:spring事務管理-使用基礎
(1)springboot怎麼啟動spring的事務管理的要理解spring的事務管理,首先要從springboot啟動spring事務的流程開始,初步理解下spring事務執行機制。(2)spring的事務管理實現原理
(3)基於jdk的動態**的aop是如何與spring事務結合的(spring事務管理是基於aop實現的)。
基於springboot的autoconfiguration機制,可以得到如下啟動流程圖:
(1)自動裝配配置類 proxytransctionmanagementconfiguration,這個類首先注入了annotationtransactionattributesource,用來讀取解析 @transactional註解,獲取需要進行事務管理的方法,並將相關的事務管理配置的引數暴露給spring。
(2)注入transactioninterceptor:基於aop methodinterceptor實現的宣告式事務管理,內部依賴於transactionmanager,transactionmanager是實際的事務管理物件。
(3)注入beanfactorytransactionattributesourceadvisor:由annotationtransactionattributesource驅動的aop advisor,用於為@transactional註解的方法新增乙個事務advice通知
2)注入datasource
這裡主要是看你的專案使用的是什麼資料來源,dbcp、阿里的druid、tddl等等,然後注入datasource介面的實現類就ok了。
因為spring的事務管理是基於資料來源的事務實現的,也就是說spring的transactionmanager是依賴於datasource的,所以必須先注入這個資料來源這個bean.
3)datasourcetransactionmanagerautoconfiguration
spring中預設的事務管理器是:datasourcetransactionmanager,事務管理是依賴於datasource,
4)transactionautoconfiguration
這個主要是注入了transactiontemplate這個bean,這個類主要是用於程式設計式事務的,當我們需要使用程式設計式事務的時候,直接注入這個bean, 然後呼叫相應的介面,實現事務的管理。當我們通過spring的宣告式事務管理的時候,是用不到這個類的。
以上就是springboot啟動spring事務管理的過程,以及相互依賴關係
從前面我們已經了解到,spring的事務管理是基於transactionmanager,
spring事務的實現原理
先來看看這張圖,spring中有很多事務管理的介面,最重要的就這三大塊 transanction definition用來定義事務的一些屬性 事務的傳播行為隔離級別什麼的 platformtransanctionmanager介面,用來定義事務管理器 transanctionstatus用來記錄事務...
spring事務實現原理
如果你用過spring aop,那麼理解註解事務就十分簡單了。事務註解本質上實在事務方法加入乙個around切面,在方法開始前開始事務,在丟擲異常後回滾事務。使用簡單偽 可以簡單理解為 dowithtransaction catch exception ex spring transaction有各...
spring中手動提交事務及事務原理
spring中手動提交事務分為六步 1 新增依賴,sprongboot 會預設開啟事務管理 org.springframework.boot 和spring boot starter jdbc 2 在需要的服務類裡引入bean autowired datasourcetransactionmanag...