Spring傳播行為 隔離級別

2021-10-09 09:35:51 字數 1848 閱讀 6601

傳播行為定義了被呼叫方法的事務邊界。

傳播行為

意義

propergation_mandatory

表示方法必須執行在乙個事務中,如果當前事務不存在,就丟擲異常

propagation_nested

表示如果當前事務存在,則方法應該執行在乙個巢狀事務中。否則,它看起來和 propagation_required看起來沒什麼倆樣

propagation_never

表示方法不能執行在乙個事務中,否則丟擲異常

propagation_not_supported

表示方法不能執行在乙個事務中,如果當前存在乙個事務,則該方法將被掛起

propagation_required

表示當前方法必須執行在乙個事務中,如果當前存在乙個事務,那麼該方法執行在這個事務中,否則,將建立乙個新的事務

propagation_requires_new

表示當前方法必須執行在自己的事務中,如果當前存在乙個事務,那麼這個事務將在該方法執行期間被掛起

propagation_supports

表示當前方法不需要執行在乙個是事務中,但如果有乙個事務已經存在,該方法也可以執行在這個事務中

單詞

釋義

required

必須的。說明必須要有事物,沒有就新建事物。

supports

支援。說明僅僅是支援事務,沒有事務就非事務方式執行。

mandatory

強制的。說明一定要有事務,沒有事務就丟擲異常。

required_new

必須新建事物。如果當前存在事物就掛起。

not_supported

不支援事物,如果存在事物就掛起。never:絕不有事務。如果存在事物就丟擲異常

never

絕不有事務。如果存在事物就丟擲異常

隔離級別

在運算元據時可能帶來 3 個***,分別是髒讀、不可重複讀、幻讀。為了避免這 3 中***的發生,在標準的 sql 語句中定義了 4 種隔離級別,分別是未提交讀、已提交讀、可重複讀、可序列化。而在 spring 事務中提供了 5 種隔離級別來對應在 sql 中定義的 4 種隔離級別,如下:

隔離級別

意義

isolation_default

使用後端資料庫預設的隔離級別

isolation_read_uncommitted

允許讀取未提交的資料(對應未提交讀),可能導致髒讀、不可重複讀、幻讀

isolation_read_committed

允許在乙個事務中讀取另乙個已經提交的事務中的資料(對應已提交讀)。可以避免髒讀,但是無法避免不可重複讀和幻讀

isolation_repeatable_read

乙個事務不可能更新由另乙個事務修改但尚未提交(回滾)的資料(對應可重複讀)。可以避免髒讀和不可重複讀,但無法避免幻讀

isolation_serializable

這種隔離級別是所有的事務都在乙個執行佇列中,依次順序執行,而不是並行(對應可序列化)。可以避免髒讀、不可重複讀、幻讀。但是這種隔離級別效率很低,因此,除非必須,否則不建議使用。

Spring 事務 傳播行為 隔離級別

資料庫事務併發問題 隔離級別 各個隔離級別解決併發問題的能力 當事務方法被另乙個事務方法呼叫時,必須指定事務應該如何傳播。例如 方法可能繼續在現有的事務中執行,也可能開啟乙個新事務,並在自己的事務中執行。事務的傳播行為可以由傳播屬性指定。spring 定義了 7 種傳播行為。如果有事務在執行,當前的...

Spring 事務隔離級別和傳播行為

名詞 含義原因 髒讀乙個事務讀取了另乙個事務還沒有提交的資料 乙個事務對某資料進行更新,但並未提交,另一事務讀取到了該資料,但是前乙個事務如果回滾,那麼後乙個事務就讀取到了錯誤資料 不可重複讀 乙個事務多次讀取同乙個資料,結果不同 乙個事務在2次讀取某資料之間時,另乙個事務對資料進行了更新,導致前乙...

Spring事物傳播行為和隔離級別

b spring的事務隔離級別 isolation default 使用資料庫預設的隔離級別。isolation read uncommitted 允許讀取改變了的還未提交的資料,可能導致髒讀 不可重複讀和幻讀。isolation read committed 允許併發事務提交之後讀取,可以避免髒讀...