文章目錄
事務傳播行爲指的是一個事務方法被另一個事務方法調用時,這個事務方法應該如何進行。
比如說,有一個A方法,裏面調用了B方法,當執行到B方法時,是應該在當前事務裏執行,還是重新打開一個事務來執行,這是由B方法的事務傳播行爲決定的
七種事務傳播行爲
PROPAGATION_REQUIRED | 表明當前方法一定要在事務中執行,如果有事務存在,就在當前事務中執行;如果沒有,則啓動一個新的業務執行 |
---|---|
PROPAGATION_SUPPORTS | 表明當前方法可以不在事務中執行,如果有事務存在,纔會在事務中執行,否則就會以非事務的方式執行 |
PROPAGATION_MANDATORY | 表明當前方法一定要在事務中執行,如果不存在事務,就會拋出一個異常 |
PROPAGATION_REQUIRED_NEW | 表明當前方法必須運行在自己的事務中,如果當前事務存在的話,會將原來事務掛起,然後啓動新事務來執行這個方法,方法執行完成後,纔會將原來的事務恢復,原來的事務和新啓動的事務是互不干擾的 |
PROPAGATION_NOT_SUPPORTED | 表明當前方法不在事務中運行,如果當前事務存在的話,會將原來事務掛起,然後以非事務的方式執行完當前方法,然後再恢復原有事務 |
PROPAGATION_NEVER | 表明當前方法不能運行在事務中,如果當前事務存在,則會拋出異常 |
PROPAGATION_NESTED | 表明嵌套事務,如果當前事務存在的話,會在事務內部開啓一個事務,並且原來事務不會被掛起,也就是說,外部事務和內部事務是有關係的,外部事務的回滾會導致內部事務的回滾 |
主要就是PROPAGATION_REQUIRED_NEW和PROPAGATION_NESTED的區別:
兩者都是嵌套事務,區別就是,前者的外部事務和內部事務是不關聯的,外部事務的無法回滾和提交內部事務,也就是說外部事務的執行成功與否不影響內部事務的回滾或提交;而後者的外部事務與內部事務是相關聯的,外部事務的執行失敗會導致內部事務的回滾