Spring 事務傳播機制和資料庫的事務隔離級別

2022-01-10 07:52:59 字數 2250 閱讀 2676

propagation(事務傳播屬性)

類別傳播型別

說明支援當前事務

required

如果當前沒有事務,就新建乙個事務。@transaction的預設選擇

支援當前事務

supports

就以非事務的方式執行。

支援當前事務

mandatory

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

不支援當前事務

requires_new (隔離)

如果當前存在事務,就把當前事務掛起,執行當前新建十五完成後,上下文事務恢復後再執行。

不支援當前事務

not_supported(不支援)

以非事務的方式執行操作;如果當前存在事務,就把當前事務掛起,執行當前邏輯,結束後恢復上下文的事務。

不支援當前事務

never(強制非事務)

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

巢狀事務

nested(巢狀事務)

如果當前存在事務,則巢狀在事務中執行。類似rerquired的特徵。

呼叫示例

servicea

servicea 

}

serviceb

serviceb       

}

required

假設當前執行的事務不在另外乙個事務裡,那麼久新起乙個事務;比如,serviceb.methodb的事務定義級別是propagation_required,那麼在執行servicea.methoda的時候,servicea.methoda已經起了事務。這是呼叫serviceb.methodb,serviceb.methodb看到自己已經執行在servicea.methoda的事務內部,就不再啟動新事物。如果servicea.methoda沒有事務,那麼b回自己啟動乙個事務。這樣a、b兩個方法不管哪個方法發生異常,他們都會一起回滾,一榮俱榮。

supports

假設當前在事務中。即以事務的形式執行。假設當前不在乙個事務中,那麼就以非事務的形式執行

mandatory

必須在同乙個事務中執行。也就是說它僅僅能被乙個父事務呼叫。否則它就要丟擲異常。

required_new

與required相反的是,b方法不管呼叫它的有沒有事務開啟,他都會自己開啟事務,管好他自己的一某三分地。a,b分別處於兩個不同的事務中,兩方法的結果互不影響。

not_supported

當前不支援事務。比方servicea.methoda的事務級別是propagation_required 。而serviceb.methodb的事務級別是propagation_not_supported ,那麼當執行到serviceb.methodb時。servicea.methoda的事務掛起。而他以非事務的狀態執行完,再繼續servicea.methoda的事務。

never

不能在事務中執行。

如果servicea.methoda的事務級別是propagation_required。 而serviceb.methodb的事務級別是propagation_never ,那麼serviceb.methodb就要丟擲異常了。

nested

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

spring事務的隔離級別

型別說明

isolation_default

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

isolation_read_uncommitted

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

isolation_read_committed

保證乙個事務修改的資料提交後才能被另外乙個事務讀取。另外乙個事務不能讀取該事務未提交的資料

isolation_repeatable_read

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

isolation_serializable

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

Spring事務傳播機制

在 spring的 transactiondefinition介面中一共定義了7種事務傳播屬性 propagation required 支援當前事務,如果當前沒有事務,就新建乙個事務。這是最常見的選擇,也是spring事務傳播機制的預設值。propagation supports 支援當前事務,如...

spring事務傳播機制

1.required 必須有乙個事務的支援。如果沒有事務,則新建立乙個,如果有父事務,則使用 fetch 父級事務 2.requires new 必定會建立乙個事務。如果有父事務,則掛起 suspend 父事務,等子事務執行完畢,在恢復 resume 父事務 3.supports 可以有或者沒有事務...

spring事務傳播機制

spring事務傳播機制 propagation required spring預設 如果已經存在事務,那麼加入當前事務,如果不存在事務,則新建事務。總是建立乙個新的事務。新建立事務a,而以前的事務b還在執行。此時有兩個事務,事務a先執行,事務b則被掛起。只有事務a執行完畢後,事務b將繼續執行。ro...