Spring中事務(wù)傳播行為的介紹
傳播行為定義關(guān)于客戶端和被調(diào)用方法的事務(wù)邊界。Spring定義了7種截然不同的傳播行為。
- 1,PROPAGATION_MANDATORY,表示該方法必須運行在一個事務(wù)中。如果當(dāng)前沒有事務(wù)正在發(fā)生,則拋出異常。
- 2,PROPAGATION_NESTED,表示如果當(dāng)前有一個事務(wù)正在運行當(dāng)中,則該方法應(yīng)該運行在一個嵌套事務(wù)中。被嵌套的事務(wù)可以獨立于封裝事務(wù)進行提交或回滾。如果封裝事務(wù)不存在,則行為就像PROPAGATION_REQUIRED一樣。
- 3,PROPAGATION_NEVER,表示當(dāng)前方法不應(yīng)該在一個事務(wù)上下文中運行。如果當(dāng)前有一個事務(wù)正在運行,則拋出異常。
- 4,PROPAGATION_NOT_SUPPORTED,表示該方法不應(yīng)該在一個事務(wù)中運行。如果當(dāng)前有一個事務(wù)正在運行,它將在該方法運行期間被掛起。
- 5,PROPAGATION_REQUIRED,表示當(dāng)前方法必須在一個事務(wù)中運行。如果當(dāng)前有一個事務(wù)正在運行,該方法將會在那個事務(wù)中運行。否則的話,就會開始一個新的事務(wù)。
- 6,PROPAGATION_REQUIRES_NEW,表示當(dāng)前方法必須在它自己的事務(wù)里運行。一個新的事務(wù)將被啟動,而且如果有一個現(xiàn)有事務(wù)正在運行的話,則它將在當(dāng)前方法運行期間被掛起。
- 7,PROPAGATION_SUPPORTS,表示當(dāng)前事務(wù)不需要事務(wù)性上下文,但是如果一個事務(wù)正在運行的話,它也可以在這個事務(wù)里運行。
讀上述7種事務(wù)的一些說明如下。
第一種事務(wù),mandatory,表示強制的,即方法必須在一個事務(wù)中運行,否則,拋出異常。它要求必須處在一個封裝事務(wù)里,且它自己不會開啟新的事務(wù)。
第二種事務(wù),nested,嵌套的,它要求當(dāng)前已經(jīng)有一個封裝事務(wù)了,且它自己會作為一個內(nèi)部嵌套的事務(wù)來運行。如果當(dāng)前沒有封裝事務(wù),則它就不管外界了,自己啟動一個事務(wù)來運行。
第三種事務(wù),never,不作為事務(wù),自己不啟動事務(wù),且外界不能有事務(wù)。
第四種和第七種一起來看,SUPPORTS,表示該方法不需要事務(wù)上下文,但外界如果有事務(wù)的話,它也支持在一個外界事務(wù)里運行。NOT_SUPPORTED,表示該方法不應(yīng)在一個事務(wù)上下文里運行,如果外界有事務(wù),那么就把外界事務(wù)掛起,在運行該方法。NOT_SUPPORTED和NEVER的區(qū)別在于,當(dāng)外界有事務(wù)時,NOT_SUPPORTED不會拋出異常。
第五種和第六種一起來看,REQUIRED表示當(dāng)前方法必須在一個事務(wù)中運行,如果外界有事務(wù),那么它就依賴于外界事務(wù)。如果外界沒有事務(wù),它就自己開啟一個事務(wù)。REQUIRED和NESTED的區(qū)別在于,當(dāng)外界有事務(wù)時,NESTED會再創(chuàng)建一個事務(wù),而REQUIRED不創(chuàng)建新事務(wù),只是在外界事務(wù)里運行。REQUIRES_NEW表示當(dāng)前方法必須在自己的事務(wù)里運行。如果外界有事務(wù),則把外界事務(wù)掛起。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
Spring Boot 集成 MongoDB Template 的步驟
MongoDB 是一個流行的 NoSQL 數(shù)據(jù)庫,適合處理大量非結(jié)構(gòu)化數(shù)據(jù),本篇文章將詳細(xì)介紹如何在 Spring Boot 3.4.0 中集成 MongoDB Template,從零開始構(gòu)建一個簡單的應(yīng)用程序,感興趣的朋友一起看看吧2024-12-12
Java19新特性中結(jié)構(gòu)化并發(fā)的使用
Java19在并發(fā)編程領(lǐng)域引入了一個全新的概念:結(jié)構(gòu)化并發(fā),這一特性旨在簡化并發(fā)任務(wù)的管理,提升多線程程序的可維護性和安全性,使其生命周期和控制流更加有序和明確,感興趣的可以了解一下2024-09-09
java8使用流的filter來篩選數(shù)據(jù)的實現(xiàn)
這篇文章主要介紹了java8使用流的filter來篩選數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
Java之Spring認(rèn)證使用Profile配置運行環(huán)境講解
這篇文章主要介紹了Java之Spring認(rèn)證使用Profile配置運行環(huán)境講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
springboot中使用redis并且執(zhí)行調(diào)試lua腳本
今天有個項目需要使用redis,并且有使用腳本的需求,本文主要介紹了springboot中使用redis并且執(zhí)行調(diào)試lua腳本,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
SpringBoot請求參數(shù)相關(guān)注解說明小結(jié)
這篇文章主要介紹了SpringBoot請求參數(shù)相關(guān)注解說明,主要包括@PathVariable,@RequestHeader、@CookieValue、@RequestBody和@RequestParam,本文結(jié)合實例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下2022-05-05
Java封裝數(shù)組之動態(tài)數(shù)組實現(xiàn)方法詳解
這篇文章主要介紹了Java封裝數(shù)組之動態(tài)數(shù)組實現(xiàn)方法,結(jié)合實例形式詳細(xì)分析了java動態(tài)數(shù)組的實現(xiàn)原理、操作步驟與相關(guān)注意事項,需要的朋友可以參考下2020-03-03

