Spring事務特性及其傳播行為詳解

2021-10-08 21:46:54 字數 1503 閱讀 4731

行為解釋

對應的註解使用

propagation_required

(預設)以事務執行,當前有事務則加入事務,無事務則建立事務

@transactional(propagation = propagation.required)

propagation_supports

支援事務執行,如果沒有事務則以非事務執行(實際應用上與不加註解沒什麼去唄,實際上還是有點區別)

@transactional(propagation = propagation.supports)

propagation_mandatory

用於標識乙個方法必須開啟事務使用,否則丟擲異常。此行為在乙個方法強烈需要使用事務管理的時候使用。由周圍事務驅動,本身並不建立事務

@transactional(propagation = propagation.mandatory)

propagation_requires_new

建立乙個新事務,掛起當前事務,當執行完成new事務後返回當前事務,當前事務如果回滾不影響new事務的提交,如果new事務丟擲異常,當前事務方法沒有正確捕獲異常,則全部回滾

@transactional(propagation = propagation.requires_new)

propagation_not_supported

已非事務執行,當前存在事務則掛起

@transactional(propagation = propagation.not_supported)

propagation_never

以非實物執行,如果存在事務則丟擲異常

@transactional(propagation = propagation.never)

propagation_nested

建立乙個新事務,當前事務存在時則加入當前事務作為乙個巢狀事務。

@transactional(propagation = propagation.nested)

serviceacatch(e)

}} serviceb

}

springboot預設開啟了cglibproxy

檢視spring的bean當前使用的**模式
預設不使用**的,當類或者類中某個方法加入事務的時候會使用**

事務生效場景
加了事務註解的方法,理論上只有一種情況生效,那就是通過**類呼叫事務方法

aopcontext.currentproxy()獲取當前類的**類

**:

serviceacatch(e)

}public void aa()

} serviceb

public void bb(){}

}

以下呼叫過程及事務是否生效

spring事務傳播特性

1.propagation required 如果存在乙個事務 則支援當前事務。如果沒有事務則開啟。2.propagation supports 如果存在乙個事務 則支援當前事務。如果沒有事務則非事務執行。3.propagation mandatory 如果已經存在乙個事務 則支援當前事務。如果沒有...

spring事務傳播特性

spring事務傳播特性 事務傳播行為就是多個事務方法相互呼叫時,事務如何在這些方法間傳播。spring支援7種事務傳播行為 spring 預設的事務傳播行為是 propagation required,它適合於絕大多數的情況。假設 servivex methodx 都工作在事務環境下 即都被 sp...

Spring事務傳播特性

傳播性值描述 propagation required 0當前有事務就用當前的,沒有就用新的 propagation supports 1事務可有可無,不是必須的 propagation mandatory 2當前一定要有事務,不然就拋異常 propagation requires new 3無論是...