Spring的7種事務傳播行為

2021-10-03 13:06:31 字數 1144 閱讀 5412

事務傳播行為指的是乙個事務方法被另乙個事務方法呼叫時,這個事務方法應該如何進行。

比如說,有乙個a方法,裡面呼叫了b方法,當執行到b方法時,是應該在當前事務裡執行,還是重新開啟乙個事務來執行,這是由b方法的事務傳播行為決定的

propagation_required

表明當前方法一定要在事務中執行,如果有事務存在,就在當前事務中執行;如果沒有,則啟動乙個新的業務執行

propagation_supports表明當前方法可以不在事務中執行,如果有事務存在,才會在事務中執行,否則就會以非事務的方式執行

propagation_mandatory表明當前方法一定要在事務中執行,如果不存在事務,就會丟擲乙個異常

propagation_required_new表明當前方法必須執行在自己的事務中,如果當前事務存在的話,會將原來事務掛起,然後啟動新事務來執行這個方法,方法執行完成後,才會將原來的事務恢復,原來的事務和新啟動的事務是互不干擾的

propagation_not_supported表明當前方法不在事務中執行,如果當前事務存在的話,會將原來事務掛起,然後以非事務的方式執行完當前方法,然後再恢復原有事務

propagation_never表明當前方法不能執行在事務中,如果當前事務存在,則會丟擲異常

propagation_nested表明巢狀事務,如果當前事務存在的話,會在事務內部開啟乙個事務,並且原來事務不會被掛起,也就是說,外部事務和內部事務是有關係的,外部事務的回滾會導致內部事務的回滾

主要就是propagation_required_newpropagation_nested的區別:

兩者都是巢狀事務,區別就是,前者的外部事務和內部事務是不關聯的,外部事務的無法回滾和提交內部事務,也就是說外部事務的執行成功與否不影響內部事務的回滾或提交;而後者的外部事務與內部事務是相關聯的,外部事務的執行失敗會導致內部事務的回滾

Spring事務的7種傳播行為

事務傳播行為指的就是當事務方法被另乙個事務方法呼叫時,這個事務方法應該如何進行。例如 methoda事務方法呼叫methodb事務方法時,methodb是繼續在呼叫者methoda的事務中執行呢,還是為自己開啟乙個新事務執行,這就是由methodb的事務傳播行為決定的。以下舉例時 方法a 中呼叫方法...

Spring7種事務傳播行為型別

事務傳播行為種類 spring在transactiondefinition介面中規定了7種型別的事務傳播行為,它們規定了事務方法和事務方法發生巢狀呼叫時事務如何進行傳播 事務傳播行為型別 事務傳播行為型別 說明propagation required 如果當前沒有事務,就新建乙個事務,如果已經存在乙...

spring宣告式事務支援7種傳播行為

propagation required 支援當前事務,如果當前沒有事務,就新建乙個事務。這是最常見的選擇。propagation supports 支援當前事務,如果當前沒有事務,就以非事務方式執行。propagation mandatory 支援當前事務,如果當前沒有事務,就丟擲異常。propa...