成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

必讀!美團(tuán)面試必問:Spring事務(wù)為何有時會失效?

開發(fā) 架構(gòu)
事務(wù)方法中存在多個數(shù)據(jù)源的原因是因為默認(rèn)情況下,Spring事務(wù)只對當(dāng)前數(shù)據(jù)源生效。如果我們在一個事務(wù)方法中操作了多個數(shù)據(jù)源,那么只有當(dāng)前數(shù)據(jù)源的操作受到事務(wù)管理器的控制,而其他數(shù)據(jù)源的操作將不受影響,導(dǎo)致事務(wù)失效。

?大家好,我是你們的小米!今天我要和大家分享的是關(guān)于Spring事務(wù)的一個熱門話題:Spring事務(wù)在哪幾種情況下會失效?為什么呢?這個問題在美團(tuán)的面試中經(jīng)常被問到,今天我就來為大家詳細(xì)解答一下。

作為一個優(yōu)秀的開發(fā)者,我們經(jīng)常需要在業(yè)務(wù)中使用事務(wù)來保證數(shù)據(jù)的一致性和完整性。Spring框架是眾多Java開發(fā)者的首選,其中的事務(wù)管理機(jī)制更是備受青睞。但是,在某些情況下,我們可能會遇到Spring事務(wù)失效的問題,那么它到底在哪幾種情況下會失效呢?接下來,讓我們一起揭秘吧!

Spring事務(wù)的基本概念

圖片首先,讓我們來了解一下Spring事務(wù)的基本概念。Spring事務(wù)通過使用@Transactional注解來標(biāo)識一個方法或類需要被事務(wù)管理,它可以確保在事務(wù)開始和結(jié)束時,數(shù)據(jù)的一致性得到保證。事務(wù)可以包含多個數(shù)據(jù)庫操作,當(dāng)其中一個操作失敗時,整個事務(wù)將會回滾,保證數(shù)據(jù)的完整性。

事務(wù)什么情況下失效

那么,Spring事務(wù)在哪幾種情況下會失效呢?

事務(wù)方法未被正確調(diào)用:Spring事務(wù)的生效需要方法調(diào)用被Spring框架管理,而不是通過普通的Java對象直接調(diào)用。如果我們直接調(diào)用了一個標(biāo)記了@Transactional注解的方法,而沒有經(jīng)過Spring框架的代理對象,事務(wù)將不會生效。

異常被捕獲而未拋出:在Spring事務(wù)中,當(dāng)一個被@Transactional注解標(biāo)記的方法拋出未被捕獲的異常時,事務(wù)會自動回滾。然而,如果我們在方法中捕獲了異常并未將其重新拋出,事務(wù)將無法感知到異常的存在,從而導(dǎo)致事務(wù)失效。

事務(wù)方法中存在多個數(shù)據(jù)源:在某些場景下,我們可能需要在一個事務(wù)方法中操作多個數(shù)據(jù)源,例如跨庫操作或者多個數(shù)據(jù)庫操作。然而,默認(rèn)情況下,Spring事務(wù)只對當(dāng)前數(shù)據(jù)源生效,對于其他數(shù)據(jù)源的操作將不受事務(wù)管理的控制,從而導(dǎo)致事務(wù)失效。

非公開方法內(nèi)部調(diào)用:當(dāng)一個事務(wù)方法內(nèi)部調(diào)用了同一個類中的其他方法時,如果被調(diào)用的方法沒有@Transactional注解,那么事務(wù)將不會傳播到被調(diào)用的方法中,從而導(dǎo)致事務(wù)失效。

事務(wù)為什么會失效

為什么會出現(xiàn)以上情況導(dǎo)致事務(wù)失效呢?讓我們一一解答:

方法未被正確調(diào)用的原因是因為Spring事務(wù)通過AOP(面向切面編程)來實現(xiàn),需要在Spring容器中通過代理對象來調(diào)用被@Transactional注解標(biāo)記的方法。如果我們直接通過普通的Java對象來調(diào)用方法,將無法觸發(fā)Spring事務(wù)的代理邏輯,導(dǎo)致事務(wù)失效。

異常被捕獲而未拋出的原因是我們可能在方法中捕獲了異常,并進(jìn)行了一些處理或者日志記錄等操作,但是卻沒有將異常重新拋出。這樣事務(wù)管理器就無法感知到異常的存在,無法進(jìn)行事務(wù)的回滾操作,從而導(dǎo)致事務(wù)失效。

事務(wù)方法中存在多個數(shù)據(jù)源的原因是因為默認(rèn)情況下,Spring事務(wù)只對當(dāng)前數(shù)據(jù)源生效。如果我們在一個事務(wù)方法中操作了多個數(shù)據(jù)源,那么只有當(dāng)前數(shù)據(jù)源的操作受到事務(wù)管理器的控制,而其他數(shù)據(jù)源的操作將不受影響,導(dǎo)致事務(wù)失效。

非公開方法內(nèi)部調(diào)用的原因是Spring事務(wù)的傳播行為。默認(rèn)情況下,事務(wù)的傳播行為是PROPAGATION_REQUIRED,即如果當(dāng)前沒有事務(wù),就創(chuàng)建一個新事務(wù);如果已經(jīng)存在一個事務(wù),就加入到這個事務(wù)中。然而,當(dāng)事務(wù)方法內(nèi)部調(diào)用了同一個類中的其他方法時,如果被調(diào)用的方法沒有@Transactional注解,事務(wù)管理器無法對其進(jìn)行事務(wù)管理,從而導(dǎo)致事務(wù)失效。

END

以上就是Spring事務(wù)失效的幾種情況及原因的詳細(xì)解答。希望通過這篇文章的分享,能夠幫助大家更好地理解Spring事務(wù)的使用和注意事項,避免在實際開發(fā)中出現(xiàn)事務(wù)失效的問題。

責(zé)任編輯:武曉燕 來源: 知其然亦知其所以然
相關(guān)推薦

2021-12-13 11:12:41

Spring事務(wù)失效

2023-03-28 21:33:53

面試隔離MVCC

2021-07-19 09:19:31

深度學(xué)習(xí)編程人工智能

2022-11-08 17:39:27

MySQLkilled

2024-01-05 14:20:55

MySQL索引優(yōu)化器

2018-10-24 14:35:56

2023-02-02 07:06:10

2023-01-31 08:44:50

SQL語句查詢

2021-10-07 11:00:38

Windows 11操作系統(tǒng)微軟

2018-04-23 09:50:54

2023-04-03 10:24:00

spring事務(wù)場景

2023-06-07 08:08:43

JVM內(nèi)存模型

2020-07-28 08:59:22

JavahreadLocal面試

2021-12-09 12:22:28

MyBatis流程面試

2022-02-14 16:53:57

Spring項目數(shù)據(jù)庫

2023-02-03 07:24:49

雙親委派模型

2021-12-06 11:03:57

JVM性能調(diào)優(yōu)

2021-12-27 08:22:18

Kafka消費模型

2024-05-16 17:58:30

線程任務(wù)線程通訊線程池

2023-05-22 08:17:04

點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 午夜网| 国产精品久久久久婷婷二区次 | 亚洲网址在线观看 | 日韩二区 | 激情网站在线观看 | 天天爽网站 | 美女视频一区 | 色av一区二区 | 日本不卡免费新一二三区 | 日本成人中文字幕在线观看 | 日韩精品色网 | 亚洲天堂久久 | 亚洲综合99 | 欧美一级视频免费看 | 日本三级做a全过程在线观看 | 羞羞的视频在线 | 欧美 日韩 国产 一区 | 国产精品一区久久久 | 人人亚洲| 欧美日韩专区 | 亚洲国产成人精品女人久久久 | 羞羞视频网站免费观看 | 一级视频在线免费观看 | 成人精品在线观看 | 国产精品国产精品 | 亚洲精品视频播放 | 成人高清视频在线观看 | av中文网 | 久久久久久久一区 | 一级毛片高清 | 精品在线一区二区三区 | 成人免费看电影 | 国产精品日产欧美久久久久 | 亚洲一区二区三区久久久 | 四虎影院免费在线 | 爱爱视频日本 | 久久精品色欧美aⅴ一区二区 | 亚洲欧美一区二区三区国产精品 | www视频在线观看 | 自拍偷拍亚洲欧美 | 久久成人激情 |