Spring 事務的實現原理和配置方式

2021-10-25 11:05:37 字數 1339 閱讀 4159

spring 事務的本質其實就是資料庫對事務的支援,沒有資料庫的事務支援,spring 是無法提供事務功能的。真正的資料庫層的事務提交和回滾是通過binlog 或者 redo log 實現的。

spring 事務的傳播行為說的是,當多個事務同時存在的時候, spring 如何處理這些事務的行為。

propagation_required:如果當前沒有事務,就建立乙個新事務,如果當前存在事務,就加入該事務,該設定是最常用的設定。

propagation_supports:支援當前事務,如果當前存在事務,就加入該事務,如果當前不存在事務,就以非事務執行

propagation_mandatory:支援當前事務,如果當前存在事務,就加入該事務,如果當前不存在事務,就丟擲異常。

propagation_requires_new:建立新事務,無論當前存不存在事務,都建立新事務。

propagation_not_supported:以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。

propagation_never: 以非事務方式執行,如果當前存在事務,則丟擲異常。

propagation_nested:如果當前存在事務,則在巢狀事務內執行。如果當前沒有事務,則按 required 屬性執行

isolation_default:這是個 platfromtransactionmanager 預設的隔離級別,使用資料庫預設的事務隔離級別.

isolation_read_uncommitted:讀未提交,允許另外乙個事務可以看到這個事務未提交的資料。

isolation_read_committed:讀已提交,保證乙個事務修改的資料提交後才能被另一事務讀取,而且能看到該事務對已有記錄的更新.

isolation_repeatable_read:可重複讀,保證乙個事務修改的資料提交後才能被另一事務讀取,但是不能看到該事務對已有記錄的更新。

isolation_serializable:乙個事務在執行的過程中完全看不到其他事務對資料庫所做的更新。

spring 支援程式設計式事務管理和宣告式事務管理兩種方式:

宣告式事務最大的優點就是不需要在業務邏輯**中摻雜事務管理的**,只需在配置檔案中做相關的事務規則宣告或通過@transactional 註解的方式,便可以將事務規則應用到業務邏輯中。

宣告式事務管理要優於程式設計式事務管理,這正是 spring 倡導的非侵入式的開發方式,使業務**不受汙染,只要加上註解就可以獲得完全的事務支援。唯一不足地方是,最細粒度只能作用到方法級別,無法做到像程式設計式事務那樣可以作用到**塊級別。

宣告式事務本質是通過 aop 功能,對方法前後進行攔截,將事務處理的功能編織到攔截的方法中,也就是在目標方法開始之前加入乙個事務,在執行完目標方法之後根據執**況提交或者回滾事務。

spring事務的實現原理

先來看看這張圖,spring中有很多事務管理的介面,最重要的就這三大塊 transanction definition用來定義事務的一些屬性 事務的傳播行為隔離級別什麼的 platformtransanctionmanager介面,用來定義事務管理器 transanctionstatus用來記錄事務...

Spring事務傳遞機制和實現原理

實現原理事務的傳播行為可以由傳播屬性指定,spring定義了7種傳播行為。propagation required 如果存在乙個事務,則支援當前事務。如果沒有事務則開啟乙個新的事務。propagation supports 如果存在乙個事務,支援當前事務。如果沒有事務,則非事務的執行。但是對於事務同...

spring事務實現原理

如果你用過spring aop,那麼理解註解事務就十分簡單了。事務註解本質上實在事務方法加入乙個around切面,在方法開始前開始事務,在丟擲異常後回滾事務。使用簡單偽 可以簡單理解為 dowithtransaction catch exception ex spring transaction有各...