spring定義的5個事務隔離級別和7種傳播行為

2021-08-09 10:48:35 字數 2004 閱讀 3720

在transactiondefinition介面中定義了五個不同的事務隔離級別

isolation_default 這是乙個platfromtransactionmanager預設的隔離級別,使用資料庫預設的事務隔離級別.另外四個與jdbc的隔離級別相對應 

isolation_read_uncommitted 這是事務最低的隔離級別,它充許別外乙個事務可以看到這個事務未提交的資料。這種隔離級別會產生髒讀,不可重複讀和幻像讀

isolation_read_committed 保證乙個事務修改的資料提交後才能被另外乙個事務讀取。另外乙個事務不能讀取該事務未提交的資料。這種事務隔離級別可以避免髒讀出現,但是可能會出現不可重複讀和幻像讀。

isolation_repeatable_read 這種事務隔離級別可以防止髒讀,不可重複讀。但是可能出現幻像讀。它除了保證乙個事務不能讀取另乙個事務未提交的資料外,還保證了避免下面的情況產生(不可重複讀)。

isolation_serializable 這是花費最高代價但是最可靠的事務隔離級別。事務被處理為順序執行。除了防止髒讀,不可重複讀外,還避免了幻像讀。

在transactiondefinition介面中定義了七個事務傳播行為。

propagation_required 如果存在乙個事務,則支援當前事務。如果沒有事務則開啟乙個新的事務。

propagation_supports 如果存在乙個事務,支援當前事務。如果沒有事務,則非事務的執行。但是對於事務同步的事務管理器,propagation_supports與不使用事務有少許不同。

propagation_mandatory 如果已經存在乙個事務,支援當前事務。如果沒有乙個活動的事務,則丟擲異常。

propagation_requires_new 總是開啟乙個新的事務。如果乙個事務已經存在,則將這個存在的事務掛起。

propagation_not_supported 總是非事務地執行,並掛起任何存在的事務。

propagation_never 總是非事務地執行,如果存在乙個活動事務,則丟擲異常

propagation_nested如果乙個活動的事務存在,則執行在乙個巢狀的事務中. 如果沒有活動事務, 則按transactiondefinition.propagation_required 屬性執行

事務傳播行為種類

spring在transactiondefinition介面中規定了7種型別的事務傳播行為,它們規定了事務方法和事務方法發生巢狀呼叫時事務如何進行傳播:

表1事務傳播行為型別

事務傳播行為型別

說明                         

propagation_required

如果當前沒有事務,就新建乙個事務,如果已經存在乙個事務中,加入到這個事務中。這是最常見的選擇。

propagation_supports

支援當前事務,如果當前沒有事務,就以非事務方式執行。

propagation_mandatory

使用當前的事務,如果當前沒有事務,就丟擲異常。

propagation_requires_new

新建事務,如果當前存在事務,把當前事務掛起。

propagation_not_supported

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

propagation_never

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

propagation_nested

如果當前存在事務,則在巢狀事務內執行。如果當前沒有事務,則執行與propagation_required類似的操作。

當使用propagation_nested時,底層的資料來源必須基於jdbc 3.0,並且實現者需要支援儲存點事務機制。

Spring事務的5種隔離級別

概述 isolation設定事務的隔離級別,事務管理器根據它來控制另外乙個事務可以看到本事務內的哪些資料。定義的5個不同的事務隔離級別 default 預設的隔離級別,使用資料庫預設的事務隔離級別 read committed 保證乙個事務修改的資料提交後才能被另外乙個事務讀取。另外乙個事務不能讀取...

spring事務的隔離

isolation default 使用資料庫預設的事務隔離級別 isolation read uncommitted 允許讀取尚未提交的修改,可能導致髒讀 幻讀和不可重複讀 isolation read committed 允許從已經提交的事務讀取,可防止髒讀 但幻讀,不可重複讀仍然有可能發生 i...

Spring事務隔離等級

首先了解事務訪問資料庫讀取資料會出現的情況 1 髒讀 dirty reads 事務a的未提交 還依然快取 的資料被事務b讀走,此時事務a提交失敗,資料回滾,會導致事務b所讀取的的資料是快取中的錯誤資料。2 不可重複讀 non repeatable reads 在a事務內,多次讀同一資料。a事務還沒有...