最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring中的事務(wù)隔離級別和傳播行為

 更新時(shí)間:2023年03月16日 09:54:55   作者:xiaoguangtouqiang  
這篇文章主要介紹了Spring中的事務(wù)隔離級別和傳播行為,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Spring的事務(wù)隔離級別和事務(wù)的傳播行為是面試中經(jīng)??疾斓膯栴},做個(gè)簡單的總結(jié)。

傳播行為

在SpringBoot中通過Transactional的propagation屬性來指定,Transactional注解的具體源碼如下所示

public @interface Transactional {
 
@AliasFor("transactionManager")
String value() default "";
 
@AliasFor("value")
String transactionManager() default "";
 
Propagation propagation() default Propagation.REQUIRED;
 
Isolation isolation() default Isolation.DEFAULT;
 
}

可以看出,默認(rèn)的值是Propagation.REQUIRED;

其他的還有:

  • 1>PROPAGATION_REQUIRED支持當(dāng)前事務(wù),假設(shè)當(dāng)前沒有事務(wù)。就新建一個(gè)事務(wù)。
  • 2>PROPAGATION_SUPPORTS支持當(dāng)前事務(wù),假設(shè)當(dāng)前沒有事務(wù),就以非事務(wù)方式運(yùn)行。
  • 3>PROPAGATION_MANDATORY支持當(dāng)前事務(wù),假設(shè)當(dāng)前沒有事務(wù),就拋出異常。 
  • 4>PROPAGATION_REQUIRES_NEW新建事務(wù),假設(shè)當(dāng)前存在事務(wù)。把當(dāng)前事務(wù)掛起。
  • 5>PROPAGATION_NOT_SUPPORTED以非事務(wù)方式運(yùn)行操作。假設(shè)當(dāng)前存在事務(wù),就把當(dāng)前事務(wù)掛起。
  • 6>PROPAGATION_NEVER以非事務(wù)方式運(yùn)行,假設(shè)當(dāng)前存在事務(wù),則拋出異常。
  • 7>PROPAGATION_NESTED如果當(dāng)前存在事務(wù),則在嵌套事務(wù)內(nèi)執(zhí)行。如果當(dāng)前沒有事務(wù),則進(jìn)行與PROPAGATION_REQUIRED類似的操作。

舉個(gè)例子進(jìn)行說明

ServiceA {
       
     void methodA() {
         ServiceB.methodB();
     }
}
 
ServiceB {
       
     void methodB() {
     }
}

1>PROPAGATION_REQUIRED

如果當(dāng)前執(zhí)行的事務(wù)不在另外一個(gè)事務(wù)里,就新起一個(gè)事務(wù);ServiceB和 ServiceA在同一個(gè)事務(wù)里面,ServiceB如果異常,則整個(gè)事務(wù)認(rèn)為是執(zhí)行失敗的,即便是在A里面try catch了異常也會導(dǎo)致A和B都回滾;同樣,即便B執(zhí)行成功,A執(zhí)行報(bào)錯(cuò)產(chǎn)生異常,那么A和B都會回滾的;

2>PROPAGATION_SUPPORTS

假設(shè)當(dāng)前在事務(wù)中。即以事務(wù)的形式執(zhí)行。假設(shè)當(dāng)前不再一個(gè)事務(wù)中,那么就以非事務(wù)的形式執(zhí)行;

3>PROPAGATION_MANDATORY

支持當(dāng)前事務(wù),假設(shè)當(dāng)前沒有事務(wù),就拋出異常,也就是說他必須在一個(gè)父事務(wù)中去執(zhí)行;否則就會拋出異常;

4>PROPAGATION_REQUIRES_NEW

新建事務(wù),假設(shè)當(dāng)前存在事務(wù),把當(dāng)前事務(wù)掛起;比如服務(wù)A的事務(wù)級別是PROPAGATION_REQUIRED,那么服務(wù)B的級別是PROPAGATION_REQUIRES_NEW;那么當(dāng)運(yùn)行到ServiceB.methodB的時(shí)候,ServiceA.methodA所在的事務(wù)就會掛起。

ServiceB.methodB會起一個(gè)新的事務(wù),等待ServiceB.methodB的事務(wù)完畢以后,他才繼續(xù)運(yùn)行;跟PROPAGATION_REQUIRED的區(qū)別是會新起一個(gè)事務(wù),而不是使用父事務(wù),所以是兩個(gè)截然不同的事務(wù),ServiceB的執(zhí)行報(bào)錯(cuò),如果被ServiceA捕獲了,不會影響到ServiceA的回滾;

5>PROPAGATION_NOT_SUPPORTED

當(dāng)前不支持事務(wù),比方ServiceA.methodA的事務(wù)級別是PROPAGATION_REQUIRED 。

而ServiceB.methodB的事務(wù)級別是PROPAGATION_NOT_SUPPORTED ,那么當(dāng)執(zhí)行到ServiceB.methodB時(shí)。

ServiceA.methodA的事務(wù)掛起。而他以非事務(wù)的狀態(tài)執(zhí)行完,再繼續(xù)ServiceA.methodA的事務(wù)。

6>PROPAGATION_NEVER

不能在事務(wù)中執(zhí)行。

如果ServiceA.methodA的事務(wù)級別是PROPAGATION_REQUIRED。

而ServiceB.methodB的事務(wù)級別是PROPAGATION_NEVER ,那么ServiceB.methodB就要拋出異常了。 

7>PROPAGATION_NESTED

理解Nested的關(guān)鍵是savepoint。

他與PROPAGATION_REQUIRES_NEW的差別是,PROPAGATION_REQUIRES_NEW另起一個(gè)事務(wù)。將會與他的父事務(wù)相互獨(dú)立。

而Nested的事務(wù)和他的父事務(wù)是相依的,他的提交是要等和他的父事務(wù)一塊提交的。

也就是說,假設(shè)父事務(wù)最后回滾。他也要回滾的。 

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java的泛型擦除和運(yùn)行時(shí)泛型信息獲取方式

    Java的泛型擦除和運(yùn)行時(shí)泛型信息獲取方式

    Java泛型在編譯時(shí)會發(fā)生類型擦除,即泛型參數(shù)被替換為它們的限定類型(如Object),這使得ArrayList<Integer>和ArrayList<String>在運(yùn)行時(shí)類型相同,盡管如此,我們可以通過定義類或匿名內(nèi)部類的方式在運(yùn)行時(shí)獲取泛型信息
    2024-09-09
  • java實(shí)現(xiàn)IP地址轉(zhuǎn)換

    java實(shí)現(xiàn)IP地址轉(zhuǎn)換

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)IP地址轉(zhuǎn)換,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Java中進(jìn)程、協(xié)程與線程的區(qū)別詳解

    Java中進(jìn)程、協(xié)程與線程的區(qū)別詳解

    這篇文章主要介紹了Java中進(jìn)程,線程,協(xié)程的概念、區(qū)別以及使用場景的選擇,早期的操作系統(tǒng)每個(gè)程序就是一個(gè)進(jìn)程,知道一個(gè)程序運(yùn)行完,才能進(jìn)行下一個(gè)進(jìn)程,就是"單進(jìn)程時(shí)代",一切的程序只能串行發(fā)生,需要的朋友可以參考下
    2023-08-08
  • swing jtextArea滾動(dòng)條和文字縮放效果

    swing jtextArea滾動(dòng)條和文字縮放效果

    這篇文章主要為大家詳細(xì)介紹了swing jtextArea滾動(dòng)條和文字縮放效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Spring aop+反射實(shí)現(xiàn)電話號加密

    Spring aop+反射實(shí)現(xiàn)電話號加密

    線上項(xiàng)目涉及大量查詢接口中,存在電話號明文展示不合規(guī)的問題。如果對每個(gè)接口返回結(jié)果中電話號相關(guān)字段修改相關(guān)代碼邏輯,則工作量較大花費(fèi)時(shí)間多。因此設(shè)計(jì)電話號加密注解,減少工作量。
    2021-06-06
  • 詳解java設(shè)計(jì)模式中的門面模式

    詳解java設(shè)計(jì)模式中的門面模式

    門面模式又叫外觀模式(Facade?Pattern),主要用于隱藏系統(tǒng)的復(fù)雜性,并向客戶端提供了一個(gè)客戶端可以訪問系統(tǒng)的接口,本文通過實(shí)例代碼給大家介紹下java門面模式的相關(guān)知識,感興趣的朋友一起看看吧
    2022-02-02
  • Java模擬rank/over函數(shù)實(shí)現(xiàn)獲取分組排名的方法詳解

    Java模擬rank/over函數(shù)實(shí)現(xiàn)獲取分組排名的方法詳解

    這篇文章主要為大家詳細(xì)介紹了Java模擬rank()、over()函數(shù)獲取分組排名的方法設(shè)計(jì)及實(shí)現(xiàn),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-04-04
  • idea pom導(dǎo)入net.sf.json的jar包失敗的解決方案

    idea pom導(dǎo)入net.sf.json的jar包失敗的解決方案

    JSON(JavaScript Object Notation,JS對象簡譜)是一種輕量級的數(shù)據(jù)交換格式,這篇文章主要介紹了idea pom導(dǎo)入net.sf.json的jar包失敗的解決方案,感興趣的朋友一起看看吧
    2023-11-11
  • IDEA中sout快捷鍵無效問題的解決方法

    IDEA中sout快捷鍵無效問題的解決方法

    這篇文章主要介紹了IDEA中sout快捷鍵無效問題,在類文件中進(jìn)行操作會造成sout快捷命令無法自動(dòng)生成,比如操作了import引入其它包之后,本文給大家分享解決方法,感興趣的朋友一起看看吧
    2022-07-07
  • RocketMQ?源碼分析Broker消息刷盤服務(wù)

    RocketMQ?源碼分析Broker消息刷盤服務(wù)

    這篇文章主要為大家介紹了RocketMQ?源碼分析Broker消息刷盤服務(wù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05

最新評論

商河县| 商河县| 达拉特旗| 南丰县| 仙游县| 健康| 永新县| 区。| 林甸县| 徐州市| 安溪县| 左云县| 永川市| 体育| 于都县| 深水埗区| 康马县| 龙井市| 和平县| 睢宁县| 东阳市| 蓝山县| 江门市| 双江| 阜阳市| 南丹县| 始兴县| 通州区| 晋城| 新巴尔虎右旗| 桐庐县| 宜都市| 成安县| 金昌市| 绿春县| 黎平县| 常德市| 来安县| 鄂尔多斯市| 宁南县| 古蔺县|