Spring中事務的實現原理

2021-08-08 19:56:42 字數 1684 閱讀 8856

背景:最近的專案中需要用到spring的事務管理相關的知識,以前也了解過spring的事務管理,但是僅僅止步於會用,這一次藉著這次機會,深入原始碼分析一下spring是如何實現事務的。

前面已經有一篇文章講過了如何在spring中使用宣告式事務,並對一些特性進行了講解,具體如下:spring事務管理-使用基礎

(1)springboot怎麼啟動spring的事務管理的

(2)spring的事務管理實現原理

(3)基於jdk的動態**的aop是如何與spring事務結合的(spring事務管理是基於aop實現的)。

要理解spring的事務管理,首先要從springboot啟動spring事務的流程開始,初步理解下spring事務執行機制。

基於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...