傳播行為定義關于客戶端和被調用方法的事務邊界。spring定義了7種截然不同的傳播行為。
- 1,propagation_mandatory,表示該方法必須運行在一個事務中。如果當前沒有事務正在發生,則拋出異常。
- 2,propagation_nested,表示如果當前有一個事務正在運行當中,則該方法應該運行在一個嵌套事務中。被嵌套的事務可以獨立于封裝事務進行提交或回滾。如果封裝事務不存在,則行為就像propagation_required一樣。
- 3,propagation_never,表示當前方法不應該在一個事務上下文中運行。如果當前有一個事務正在運行,則拋出異常。
- 4,propagation_not_supported,表示該方法不應該在一個事務中運行。如果當前有一個事務正在運行,它將在該方法運行期間被掛起。
- 5,propagation_required,表示當前方法必須在一個事務中運行。如果當前有一個事務正在運行,該方法將會在那個事務中運行。否則的話,就會開始一個新的事務。
- 6,propagation_requires_new,表示當前方法必須在它自己的事務里運行。一個新的事務將被啟動,而且如果有一個現有事務正在運行的話,則它將在當前方法運行期間被掛起。
- 7,propagation_supports,表示當前事務不需要事務性上下文,但是如果一個事務正在運行的話,它也可以在這個事務里運行。
讀上述7種事務的一些說明如下。
第一種事務,mandatory
,表示強制的,即方法必須在一個事務中運行,否則,拋出異常。它要求必須處在一個封裝事務里,且它自己不會開啟新的事務。
第二種事務,nested
,嵌套的,它要求當前已經有一個封裝事務了,且它自己會作為一個內部嵌套的事務來運行。如果當前沒有封裝事務,則它就不管外界了,自己啟動一個事務來運行。
第三種事務,never
,不作為事務,自己不啟動事務,且外界不能有事務。
第四種和第七種一起來看,supports
,表示該方法不需要事務上下文,但外界如果有事務的話,它也支持在一個外界事務里運行。not_supported,表示該方法不應在一個事務上下文里運行,如果外界有事務,那么就把外界事務掛起,在運行該方法。not_supported和never的區別在于,當外界有事務時,not_supported不會拋出異常。
第五種和第六種一起來看,required
表示當前方法必須在一個事務中運行,如果外界有事務,那么它就依賴于外界事務。如果外界沒有事務,它就自己開啟一個事務。required和nested的區別在于,當外界有事務時,nested會再創建一個事務,而required不創建新事務,只是在外界事務里運行。requires_new表示當前方法必須在自己的事務里運行。如果外界有事務,則把外界事務掛起。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對服務器之家的支持。如果你想了解更多相關內容請查看下面相關鏈接
原文鏈接:https://blog.csdn.net/li_canhui/article/details/85636569