名詞
含義原因
髒讀乙個事務讀取了另乙個事務還沒有提交的資料
乙個事務對某資料進行更新,但並未提交,另一事務讀取到了該資料,但是前乙個事務如果回滾,那麼後乙個事務就讀取到了錯誤資料
不可重複讀
乙個事務多次讀取同乙個資料,結果不同
乙個事務在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
的某乙個具體實現類jtatransactionmanager
或datasourcetransactionmanager
等
使用@transactional
標註在某一方法上
或者使用transactiontemplate
來進行細粒度化的操作
spring 中事務預設回滾runtimeexception
和error
的異常
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 常用 如果有事務在執行,當前的方法就在這個事務內執行,否則...