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

2021-08-13 22:15:02 字數 2563 閱讀 4226

名詞

含義原因

髒讀乙個事務讀取了另乙個事務還沒有提交的資料

乙個事務對某資料進行更新,但並未提交,另一事務讀取到了該資料,但是前乙個事務如果回滾,那麼後乙個事務就讀取到了錯誤資料

不可重複讀

乙個事務多次讀取同乙個資料,結果不同

乙個事務在2次讀取某資料之間時,另乙個事務對資料進行了更新,導致前乙個事務前後讀取資料不一致

幻讀乙個事務多次查詢符合某一條件的資料,結果不同

乙個事務在2次查詢某一條件的資料之間時,另乙個事務插入了一條符合該條件的資料,導致前乙個事務前後查詢資料不一致

隔離級別

含義描述

serializable

序列化事務序列執行,消耗最大

repeatable read

可重複讀

避免不可重複讀,但是會出現幻讀

read_committed

讀已提交

避免髒讀,但是會出現不可重複讀和幻讀

read_uncommitted

讀未提交

會出現髒讀,不可重複讀和幻讀

default

預設使用資料庫預設的事務隔離級別

傳播行為

描述propagation_required

如果上下文已存在事務, 就加入該事務; 否則新建事務

propagation_supports

如果上下文已存在事務, 就加入該事務; 否則以非事務方式執行

propagation_not_supported

如果上下文已存在事務, 就掛起該事務, 以非事務方式執行完, 再恢復上下文事務; 否則直接以非事務方式執行

propagation_mandatory

如果上下文已存在事務, 就加入該事務; 否則拋異常

propagation_never

如果上下文已存在事務; 就拋異常; 否則以非事務方式執行

propagation_requires_new

如果上下文已存在事務, 就將上下文事務掛起,然後新建事務,直到新事務執行完,再恢復上下文事務; 否則新建事務

propagation_nested

如果上下文已存在事務,就巢狀事務; 否則新建事務

巢狀事務是子事務套在父事務中執行, 子事務是父事務的一部分. 在進入子事務之前, 父事務會建立乙個回滾點.

如果子事務回滾, 父事務會回滾到進入子事務之前建立的回滾點

如果父事務回滾, 子事務也會跟著回滾. 因為父事務結束之前, 子事務不會提交.

提交事務時, 子事務先提交,然後父事務在提交

spring 注入platformtransactionmanager的某乙個具體實現類jtatransactionmanagerdatasourcetransactionmanager

使用@transactional標註在某一方法上

或者使用transactiontemplate來進行細粒度化的操作

spring 中事務預設回滾runtimeexceptionerror的異常

transactionaspectsupport#invokewithintransaction()->

transactionaspectsupport#completetransactionafterthrowing()->

defaulttransactionattribute#rollbackon()

在 spring 中, 同乙個類中的方法, 乙個方法直接呼叫另乙個方法, 第二個方法上的@transactional是無效的

例如 :

@service

public

class

myserviceimpl

implements

myservice

@transactional

public

void

test2()

}

@restcontroller

public

class

mycontroller

public object test2()

}

mycontroller#test1()中, 通過myservice.test1()間接呼叫myservice#test2(),@transactional是不生效的

mycontroller#test2()中, 直接呼叫myservice#test2(),@transactional生效

另外傳播行為和隔離級別也是一樣, 因為它們的前提是@transactional生效

事務和事務隔離級別,Spring事務傳播和隔離級別

一 事務有四大特性,也即原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 1 原子性 即不可分割,事務要麼全部被執行,要麼全部不執行。如果事務的所有子事務全部提交成功,則所有的資料庫操作被提交,資料庫狀態發生變化 如果有子事務失敗,...

Spring事務傳播機制和隔離級別

事務的傳播機制是指新增事務時的策略。傳播機制共有以下幾種 propagation mandatory 當前事務必須在乙個已有事務環境中執行,否則丟擲異常 propagation required propagation requires new propagation nested 這三種傳播機制不...

Spring事務傳播屬性和隔離級別

當事務方法被另乙個事務方法呼叫時,必須指定事務應該如何傳播。例如 方法可能繼續在現有事務中執行,也可能開啟乙個新事務,並在自己的事務中執行 事務的傳播行為可以由傳播屬性指定 spring 定義了7種類傳播行為 傳播屬性 描述required 常用 如果有事務在執行,當前的方法就在這個事務內執行,否則...