您好,登錄后才能下訂單哦!
Spring中怎么實(shí)現(xiàn)事務(wù)傳播行為,很多新手對此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
傳播行為定義關(guān)于客戶端和被調(diào)用方法的事務(wù)邊界。Spring定義了7種截然不同的傳播行為。
1,PROPAGATION_MANDATORY,表示該方法必須運(yùn)行在一個(gè)事務(wù)中。如果當(dāng)前沒有事務(wù)正在發(fā)生,則拋出異常。
2,PROPAGATION_NESTED,表示如果當(dāng)前有一個(gè)事務(wù)正在運(yùn)行當(dāng)中,則該方法應(yīng)該運(yùn)行在一個(gè)嵌套事務(wù)中。被嵌套的事務(wù)可以獨(dú)立于封裝事務(wù)進(jìn)行提交或回滾。如果封裝事務(wù)不存在,則行為就像PROPAGATION_REQUIRED一樣。
3,PROPAGATION_NEVER,表示當(dāng)前方法不應(yīng)該在一個(gè)事務(wù)上下文中運(yùn)行。如果當(dāng)前有一個(gè)事務(wù)正在運(yùn)行,則拋出異常。
4,PROPAGATION_NOT_SUPPORTED,表示該方法不應(yīng)該在一個(gè)事務(wù)中運(yùn)行。如果當(dāng)前有一個(gè)事務(wù)正在運(yùn)行,它將在該方法運(yùn)行期間被掛起。
5,PROPAGATION_REQUIRED,表示當(dāng)前方法必須在一個(gè)事務(wù)中運(yùn)行。如果當(dāng)前有一個(gè)事務(wù)正在運(yùn)行,該方法將會在那個(gè)事務(wù)中運(yùn)行。否則的話,就會開始一個(gè)新的事務(wù)。
6,PROPAGATION_REQUIRES_NEW,表示當(dāng)前方法必須在它自己的事務(wù)里運(yùn)行。一個(gè)新的事務(wù)將被啟動,而且如果有一個(gè)現(xiàn)有事務(wù)正在運(yùn)行的話,則它將在當(dāng)前方法運(yùn)行期間被掛起。
7,PROPAGATION_SUPPORTS,表示當(dāng)前事務(wù)不需要事務(wù)性上下文,但是如果一個(gè)事務(wù)正在運(yùn)行的話,它也可以在這個(gè)事務(wù)里運(yùn)行。
讀上述7種事務(wù)的一些說明如下。
第一種事務(wù),mandatory
,表示強(qiáng)制的,即方法必須在一個(gè)事務(wù)中運(yùn)行,否則,拋出異常。它要求必須處在一個(gè)封裝事務(wù)里,且它自己不會開啟新的事務(wù)。
第二種事務(wù),nested
,嵌套的,它要求當(dāng)前已經(jīng)有一個(gè)封裝事務(wù)了,且它自己會作為一個(gè)內(nèi)部嵌套的事務(wù)來運(yùn)行。如果當(dāng)前沒有封裝事務(wù),則它就不管外界了,自己啟動一個(gè)事務(wù)來運(yùn)行。
第三種事務(wù),never
,不作為事務(wù),自己不啟動事務(wù),且外界不能有事務(wù)。
第四種和第七種一起來看,SUPPORTS
,表示該方法不需要事務(wù)上下文,但外界如果有事務(wù)的話,它也支持在一個(gè)外界事務(wù)里運(yùn)行。NOT_SUPPORTED,表示該方法不應(yīng)在一個(gè)事務(wù)上下文里運(yùn)行,如果外界有事務(wù),那么就把外界事務(wù)掛起,在運(yùn)行該方法。NOT_SUPPORTED和NEVER的區(qū)別在于,當(dāng)外界有事務(wù)時(shí),NOT_SUPPORTED不會拋出異常。
第五種和第六種一起來看,REQUIRED
表示當(dāng)前方法必須在一個(gè)事務(wù)中運(yùn)行,如果外界有事務(wù),那么它就依賴于外界事務(wù)。如果外界沒有事務(wù),它就自己開啟一個(gè)事務(wù)。REQUIRED和NESTED的區(qū)別在于,當(dāng)外界有事務(wù)時(shí),NESTED會再創(chuàng)建一個(gè)事務(wù),而REQUIRED不創(chuàng)建新事務(wù),只是在外界事務(wù)里運(yùn)行。REQUIRES_NEW表示當(dāng)前方法必須在自己的事務(wù)里運(yùn)行。如果外界有事務(wù),則把外界事務(wù)掛起。
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。