事務傳播性說明

7種事務的傳播特性


Propagation.REQUIRED
  方法被調用時自動開啓事務,在事務範圍內使用則使用同一個事務,如果當前線程中已經存在事務, 方法調用會加入此事務, 如果當前沒有事務,就新建一個事務,(默認事務傳播性是REQUIRED)
 
Propagation.REQUIRES_NEW
  無論何時自身都會開啓事務,這個事務不依賴於外部事務,它擁有自己的隔離範圍,自己的鎖,等等。當內部事務開始執行時,外部事務將被掛起,內部事務結束時,外部事務將繼續執行。
 
Propagation.SUPPORTS
  自身不會開啓事務,在事務範圍內使用掛起事務,運行完畢不使用事務
 
Propagation.NOT_SUPPORTED
  自身不會開啓事務,在事務範圍內使用掛起事務,運行完畢恢復事務
 
Propagation.MANDATORY
  自身不會開啓事務,必須在事務環境使用否則報錯
 
Propagation.NEVER
  自身不會開啓事務,在事務範圍內使用拋出異常
 
Propagation.NESTED

  如果當前存在事務,則在嵌套的事務中執行,如果沒有則按照TransactionDefinition.PROPAGATION_REQUIRED 屬性執行。可以認爲是已經存在事務的一個真正的子事務。嵌套事務開始執行時,它將取得一個 save point。如果這個嵌套事務失敗,我們將回滾到此save point。嵌套事務是外部事務的一部分,只有外部事務結束後它纔會被提交。
 Propagation.REQUIRES_NEW和Propagation.NESTED 的最大區別在於,Propagation.REQUIRES_NEW完全是一個新的事務,而 Propagation.NESTED 則是外部事務的子事務。如果外部事務 commit,嵌套事務也會被 commit,這個規則同樣適用於rollback。

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