Spring的7種事務傳播行爲


事務傳播行爲指的是一個事務方法被另一個事務方法調用時,這個事務方法應該如何進行。

比如說,有一個A方法,裏面調用了B方法,當執行到B方法時,是應該在當前事務裏執行,還是重新打開一個事務來執行,這是由B方法的事務傳播行爲決定的

七種事務傳播行爲

PROPAGATION_REQUIRED 表明當前方法一定要在事務中執行,如果有事務存在,就在當前事務中執行;如果沒有,則啓動一個新的業務執行
PROPAGATION_SUPPORTS 表明當前方法可以不在事務中執行,如果有事務存在,纔會在事務中執行,否則就會以非事務的方式執行
PROPAGATION_MANDATORY 表明當前方法一定要在事務中執行,如果不存在事務,就會拋出一個異常
PROPAGATION_REQUIRED_NEW 表明當前方法必須運行在自己的事務中,如果當前事務存在的話,會將原來事務掛起,然後啓動新事務來執行這個方法,方法執行完成後,纔會將原來的事務恢復,原來的事務和新啓動的事務是互不干擾的
PROPAGATION_NOT_SUPPORTED 表明當前方法不在事務中運行,如果當前事務存在的話,會將原來事務掛起,然後以非事務的方式執行完當前方法,然後再恢復原有事務
PROPAGATION_NEVER 表明當前方法不能運行在事務中,如果當前事務存在,則會拋出異常
PROPAGATION_NESTED 表明嵌套事務,如果當前事務存在的話,會在事務內部開啓一個事務,並且原來事務不會被掛起,也就是說,外部事務和內部事務是有關係的,外部事務的回滾會導致內部事務的回滾

主要就是PROPAGATION_REQUIRED_NEWPROPAGATION_NESTED的區別:

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章