Spring中事務嵌套這么用一定得注意了!!
最近項目上有一個使用事務相對復雜的業(yè)務場景報錯了。在絕大多數(shù)情況下,都是風平浪靜,沒有問題。其實內在暗流涌動,在有些異常情況下就會報錯,這種偶然性的問題很有可能就會在暴露到生產上造成事故,那究竟是怎么回事呢?
問題描述我們用一個簡單的例子模擬下,大家也可以看看下面這段代碼輸出的結果是什么。
(相關資料圖)
在類SecondTransactionService
定義一個簡單接口transaction2
,插入一個用戶,同時必然會拋出錯誤@Override@Transactional(rollbackFor = Exception.class)public void transaction2() { System.out.println("do transaction2....."); User user = new User("tx2", "111", 18); // 插入一個用戶 userService.insertUser(user); // 跑錯了 throw new RuntimeException();}
在另外一個類FirstTransactionService
定義一個接口transaction1
,它調用transaction2
方法,同時做了try catch
處理@Override@Transactional(rollbackFor = Exception.class)public void transaction1() { System.out.println("do transaction1 ......."); try { // 調用另外一個事務,try catch住 secondTransactionService.transaction2(); } catch (Exception e) { e.printStackTrace(); } // 插入當前用戶tx1 User user = new User("tx1", "111", 18); userService.insertUser(user);}
定義一個controller
,調用transaction1
方法@GetMapping("/testNestedTx")public String testNestedTx() { firstTransactionService.transaction1(); return "success";}
大家覺得調用這個http
接口,最終數(shù)據(jù)庫插入的是幾條數(shù)據(jù)呢?
正確答案是數(shù)據(jù)庫插入了0條數(shù)據(jù)。
同時控制臺也報錯了,報錯原因是:org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only
是否和你預想的一樣呢?你知道是為什么嗎?
原因追溯其實原因很簡單,我們都知道,一個事務要么全成功提交事務,要么失敗全部回滾。如果出現(xiàn)在一個事務中部分SQL要回滾,部分SQL要提交,這不就主打的一個”前后矛盾,精神分裂“嗎?
controller.testNestedTx() || / FirstTransactionService.transaction1() REQUIRED隔離級別 || || || 捕獲異常,提交事務,出錯啦 / || FirstTransactionService.transaction2() REQUIRED隔離級別 || || || 拋出異常,標記事務為rollback only =======================
事務的隔離級別為REQUIRED
,那么發(fā)現(xiàn)沒有事務開啟一個事務操作,有的話,就合并到這個事務中,所以transaction1()
、transaction2()
是在同一個事務中。transaction2()
拋出異常,那么事務會被標記為rollback only
, 源碼如下所示:transaction1()
由于try catch
異常,正常運行,想必就要可以提交事務了,在提交事務的時候,會檢查rollback
標記,如果是true, 這時候就會拋出上面的異常了。源碼如下圖所示:這下,是不是很清楚知道報錯的原因了,那想想該怎么處理呢?
解決之道知道了根本原因之后,是不是解決的方案就很明朗了,我們可以通過調整事務的傳播方式分拆多個事務管理,或者讓一個事務"前后一致",做一個誠信的好事務。
將try catch
放到內層事務中,也就是transaction2()
方法中,這樣內層事務會跟著外部事務進行提交或者回滾。@Override @Transactional(rollbackFor = Exception.class) public void transaction2() { try { System.out.println("do transaction2....."); User user = new User("tx2", "111", 18); userService.insertUser2(user); throw new RuntimeException(); } catch (Exception e) { e.printStackTrace(); } }
如果希望內層事務拋出異常時中斷程序執(zhí)行,直接在外層事務的catch
代碼塊中拋出e
,這樣同一個事務就都會回滾。如果希望內層事務回滾,但不影響外層事務提交,需要將內層事務的傳播方式指定為PROPAGATION_NESTED
。PROPAGATION_NESTED
基于數(shù)據(jù)庫savepoint
實現(xiàn)的嵌套事務,外層事務的提交和回滾能夠控制嵌內層事務,而內層事務報錯時,可以返回原始savepoint
,外層事務可以繼續(xù)提交。事務的傳播機制前面提到了事務的傳播機制,我們再看都有哪幾種。
PROPAGATION_REQUIRED
:加入到當前事務中,如果當前沒有事務,就新建一個事務。這是最常見的選擇,也是Spring中默認采用的方式。PROPAGATION_SUPPORTS
:支持當前事務,如果當前沒有事務,就以非事務方式執(zhí)行。PROPAGATION_MANDATORY
:支持當前事務,如果當前沒有事務,就拋出異常。PROPAGATION_REQUIRES_NEW
:新建一個事務,如果當前存在事務,把當前事務掛起。PROPAGATION_NOT_SUPPORTED
:以非事務方式執(zhí)行操作,如果當前存在事務,就把當前事務掛起。PROPAGATION_NEVER
: 以非事務方式執(zhí)行,如果當前存在事務,則拋出異常。PROPAGATION_NESTED
:如果當前存在事務,則在嵌套事務內執(zhí)行。如果當前沒有事務,則進行與PROPAGATION_REQUIRED
類似的操作。如何理解PROPAGATION_NESTED
的傳播機制呢,和PROPAGATION_REQUIRES_NEW
又有什么區(qū)別呢?我們用一個例子說明白。
serviceA.methodA()
以PROPAGATION_REQUIRED
修飾;定義serviceB.methodB()以
表格中三種方式修飾;methodA
中調用methodB
;總結在我的項目中之所以會報“rollback-only
”異常的根本原因是代碼風格不一致的原因。外層事務對錯誤的處理方式是返回true或false來告訴上游執(zhí)行結果,而內層事務是通過拋出異常來告訴上游(這里指外層事務)執(zhí)行結果,這種差異就導致了“rollback-only
”異常。大家也可以去review自己項目中的代碼,是不是也偷偷犯下同樣的錯誤了。
歡迎關注個人公眾號【JAVA旭陽】交流學習
標簽:
推薦
-
世界通訊!“曹掌柜創(chuàng)新創(chuàng)業(yè)實訓”,為曹楊新村創(chuàng)業(yè)青年帶來特別的創(chuàng)業(yè)實訓體驗
新民晚報訊(記者江躍中)4月20日,普陀區(qū)樂為社區(qū)文化服務中心(以下簡稱“樂為”)舉辦了一場主題為“...
來源: -
百度貼吧利用AI識別違規(guī)文本 文本理解技術可分析吧友觀點
百度副總裁王穎表示,百度貼吧作為全球領先的中文社區(qū),經過20年的發(fā)展已經沉淀下2281萬個興趣吧,1200...
來源: -
通訊!ChatGPT 標注指南來了!數(shù)據(jù)是關鍵
Datawhale干貨作者:太子長琴,算法工程師,Datawhale成員前言ChatGPT剛剛出來時,業(yè)內人士一致認為高質...
來源: -
世界通訊!“曹掌柜創(chuàng)新創(chuàng)業(yè)實訓”,為曹楊新村創(chuàng)業(yè)青年帶來特別的創(chuàng)業(yè)實訓體驗
新民晚報訊(記者江躍中)4月20日,普陀區(qū)樂為社區(qū)文化服務中心(以下簡稱“樂為”)舉辦了一場主題為“...
來源: -
【世界報資訊】筑牢企業(yè)數(shù)智化底座 用友發(fā)布全面數(shù)智化能力體系
人民網北京4月22日電(焦磊)當前,數(shù)字化轉型浪潮正以不同的方式重塑著每個產業(yè),各行業(yè)與數(shù)字化融合創(chuàng)...
來源: -
即時焦點:一季報行情持續(xù)升溫 機構聚焦業(yè)績高增長公司
本周一季報行情持續(xù)發(fā)酵,多家業(yè)績高增長的上市公司股價逆勢上揚,顯示資金聚焦點回歸業(yè)績基本面。市場...
來源: -
環(huán)球關注:安岳縣氣象臺解除雷電黃色預警信號【III級/較重】
據(jù)國家突發(fā)事件預警信息發(fā)布網:安岳縣氣象臺2023年04月22日05時06分解除雷電黃色預警信號。
來源: -
三星向國行版galaxynote20手機推送新系統(tǒng)更新
數(shù)碼博主@蓋樂世技術君今日發(fā)文表示,三星目前已經向國行版GalaxyNote20手機推送新系統(tǒng)更新,并下放了三...
來源: -
全球今亮點!“五一”臨近多地開行旅游專列助力市場升溫 引客來如何“留客心”?
中國網是國務院新聞辦公室領導,中國外文出版發(fā)行事業(yè)局管理的國家重點新聞網站。本網通過10個語種11個...
來源: -
焦點短訊!專家解讀一季度數(shù)據(jù)“開門紅”:經濟回暖超預期 恢復態(tài)勢需鞏固
專家解讀一季度數(shù)據(jù)“開門紅”:經濟回暖超預期恢復態(tài)勢需鞏固---4月18日,國家統(tǒng)計局公布的2023年一季...
來源: -
環(huán)球快看:甘李藥業(yè)股東明華創(chuàng)新完成減持1.99%股份 套現(xiàn)4.18億
甘李藥業(yè)股東明華創(chuàng)新完成減持1 99%股份套現(xiàn)4 18億---中國經濟網北京4月22日訊昨晚,甘李藥業(yè)發(fā)布股東...
來源: -
每日快播:明冠新材:4月21日融券賣出1.87萬股,融資融券余額1.98億元
4月21日,明冠新材(688560)融資買入689 68萬元,融資償還894 78萬元,融資凈賣出205 1萬元,融資余額1 97億元。
來源: -
焦點短訊!PC版《最后生還者:第一部》新補丁下周發(fā)布:修復崩潰、優(yōu)化幀數(shù)
頑皮狗官方宣布將于下周發(fā)布PC版《最后生還者:第一部》的1 0 4補丁,本次更新將主要優(yōu)化游戲幀數(shù)、圖...
來源: -
吉貝爾:4月21日融資買入227.92萬元,融資融券余額4986.71萬元
4月21日,吉貝爾(688566)融資買入227 92萬元,融資償還387 02萬元,融資凈賣出159 1萬元,融資余額4986 71萬元。
來源: -
當前快報:“公奔私”又熱了!公募派私募哪家強?五年回報超1000%最亮眼
財聯(lián)社4月22日訊(記者吳雨其)在大資管行業(yè)發(fā)展浪潮下,基金經理“公奔私”一直是公眾熱議的話題。W
來源: -
天天視點!孚能科技:4月21日融券凈賣出1.67萬股,連續(xù)3日累計凈賣出5.27萬股
4月21日,孚能科技(688567)融資買入663 98萬元,融資償還1114 9萬元,融資凈賣出450 92萬元,融資余額5 36億元。
來源: -
截圖!長按保存分享!Cocos Creator
一種3D截圖方案背景參考TRUESPACEwithCocos技術分享[1]中的動態(tài)生成海報的介紹,以及作者的支持。實現(xiàn)一...
來源: -
每日速看!深圳持續(xù)發(fā)力優(yōu)化營商環(huán)境 經營主體突破四百萬戶
深圳持續(xù)發(fā)力優(yōu)化營商環(huán)境經營主體突破四百萬戶---經濟日報深圳4月21日訊(記者楊陽騰)截至3月31日,深...
來源:
財富更多》
-
天天快訊:涂鴉智能美股跌8.45%
涂鴉智能美股跌8 45%---中國經濟網北京...
-
環(huán)球動態(tài):禾賽科技美股跌9.94%
禾賽科技美股跌9 94%---中國經濟網北京...
-
今日熱訊:金山云美股跌9.73%
金山云美股跌9 73%---中國經濟網北京4...
-
每日關注!經濟增長內生動力進一步增強
經濟增長內生動力進一步增強---在這樣的...
-
全球資訊:鳳凰新媒體美股漲19.00%
鳳凰新媒體美股漲19 00%---中國經濟網...
動態(tài)更多》
熱點
- realme10系列正式宣布 采用雙曲面屏正面頂部居中挖孔
- 五菱全新微型電動車內飾官圖發(fā)布 座椅采用星際形打孔工藝
- 努比亞Z40星空典藏版正式開售 采用微米級油畫筆觸紋理技術
- iQOO11系列正式官宣 首批搭載驍龍8Gen2機型之一
- 海信34英寸帶魚屏顯示器發(fā)布 支持165Hz刷新率
- OPPO明年將商用240W超級閃充 新一代電芯支持更高倍率充電
- 第一款Android手機渲染圖曝光 橫向滑蓋設計和全尺寸鍵盤
- 吉利首款純電皮卡11月9日上市 車輛續(xù)航里程超過610公里
- 努比亞Z40SPro星空典藏版正式公布 堪稱窄邊框天花板
- vivo無線運動耳機2今日正式上市 首銷只要119元
- 實時:跟風漲價往往得不償失
- 最新資訊:【文體市場面面觀】旅游專列拉近“詩與遠方”
- 索尼互娛宣布收購游戲工作室Firewalk
- 視點!德國經濟復蘇整體趨好
- 世界快資訊丨一支勁旅準備佯攻微信
- 環(huán)球今日報丨長遠鋰科:4月21日融資買入1498.15萬元,融資融券余額5.36億元
- 浦發(fā)銀行食言30%的分紅比例 分紅事小失信事大
- 美媒:美政府機密文件泄露實際時間比已知時間更早數(shù)月
- 環(huán)球下周看點:信息量很大!美股Q1財報季即將迎來最高潮
- 環(huán)球快看:劍靈有哪些職業(yè)_游戲劍靈所有職業(yè)和職業(yè)特點
- 視焦點訊!迅雷下載速度0怎么回事_解決方法說明
- 空調外機聲音大怎么回事_空調外機聲音大原因
- 大森控股(01580)4月21日發(fā)行7310.4萬股
- 焦點短訊!魅族PANDAER×IQUNIX熱愛無界超旋音機械鍵盤開賣
- 全球熱文:越秀交通基建(01052):完成發(fā)行8億元超短期融資券
- 高速離心噴霧干燥機_關于高速離心噴霧干燥機簡述
- China’s Tourism in May Day Holidays Set to Rebound to Pre-pandemic Level
- 中國中鐵(00390)第一季度新簽合同額6673.8億元 同比增長10.2%
- 全球球精選!75瓦電熱毯能在宿舍用嗎?
- 7度天氣可以用電熱毯嗎?
- 每日訊息!電熱毯使用過多的危害?
- 播報:最高法:以居住為目的 全款購房的交付請求權,優(yōu)先于建設工程價款優(yōu)先受償權 抵押權及其他債權
- 快消息!新官上任三把火!Lyft(LYFT.US)CEO計劃“大幅裁減”員工人數(shù)
- 世界關注:CBA新消息,趙繼偉傷情更新,馬布里主動示好首鋼,3隊換帥成定局
- 環(huán)球訊息:強生(JNJ.US)旗下楊森的抑郁癥療法在中國獲批
- 黑入iPhone僅需一條iMessage消息!多起NSO“零點擊”攻擊曝光
- 揭秘:溥儀的文化水平究竟有多高?專家:至少是個博士生!
- 關于友誼的詩句或名言_關于友誼的詩
- excel案例分享:表格中上百個豎排姓名如何打印到一頁紙上面
- 信息:為什么說東風雪鐵龍的目標,是讓你“享受生活”?
- 南網儲能:簽訂肇慶綠色能源項目開發(fā)框架協(xié)議
- 今頭條!說明順序作文 說明順序
- 四川廣漢:種下一片林 守望鷺鳥“春歸”
- 焦點速遞!造成溫室效應的六種溫室氣體-什么是溫室效應 產生溫室效應的氣體有哪些
- 當前熱訊:早春紅玉西瓜
- 當前速遞!三工視頻·新360行之AI訓練師|給“機器人”當師父的全國勞模
- 力元君嗶哩嗶哩空間 衛(wèi)元君
- 天天觀點:聯(lián)合國中文日主題活動開幕
- 【聚看點】塞上綠洲羊肉鮮:山西右玉向外推介
- 世界通訊!山東省一本大學一覽表_山東省一本大學
- 上海:以虛強實是推進元宇宙發(fā)展的“必由之路”
- 當前速遞!大唐推出aln-10itx主板:內置英特爾n系列處理器
- 環(huán)球看點!成都一項社區(qū)群眾性體育活動創(chuàng)造吉尼斯世界紀錄
- 全球微資訊!挪威錢幣對人民幣兌換_韓國錢幣兌換人民幣
- 【當前獨家】小學生手冊家長評語詩詞_小學生手冊家長評語
- 搬家注意事項有哪些_搬家注意事項
- 美股收盤:三大指數(shù)延續(xù)橫盤走勢 科技股財報或指明方向
- 全球速遞!【盤中寶】訂單涌向國內企業(yè),該半導體關鍵原料供應緊張,部分特定替代品今年供應都已全數(shù)售罄,這家公司相關產品實現(xiàn)國內外市場的批量交付
- 片仔癀今日大宗交易平價成交16.71萬股,成交額4497.66萬元
- 俄在日本海水域演練“摧毀敵航母戰(zhàn)斗群”
- 【全球熱聞】好數(shù)據(jù)成壞消息!美PMI超預期走強 聯(lián)儲加息又獲支撐
- 銳奇股份(300126.SZ):一季度凈虧損152.42萬元
- 2023年上海力爭新增供應6萬套(間)保租房
- 世界聚焦:武漢東湖新技術開發(fā)區(qū)探索果絮綜合治理模式,法桐飄絮難題有望得到緩解
- 天天速遞!第三屆武漢應博會4月26日開幕,一大批高精尖應急救援裝備將亮相
- 我愛我家北京市場擴張“凍結”,店多人少服務待改進,戰(zhàn)略股東被深套后仍虧損減持
- 避暑消夏好去處!晉城邀約武漢游客“太行山上過夏天”
- V觀財報|涉減持違規(guī),大港股份原副董事長王剛收警示函
- 環(huán)球最新:“聚焦2023年一季度經濟數(shù)據(jù)”系列報道 一季度人民幣匯率雙向波動小幅升值 企業(yè)要樹立匯率風險中性理念
- 今日最新!小米13 Ultra發(fā)布,聯(lián)合徠卡打造影像機皇,售價5999
- 研報掘金 | 東吳證券:容百科技Q1業(yè)績符預期 維持“買入”評級
- 京東方獨供vivoxflip折疊手機內外雙幕
- 環(huán)球觀熱點:V觀財報|東方財富一季度凈利同比降6.54%,管理費用增近1億
- 環(huán)球今熱點:長城汽車總裁穆峰:新能源下半場競爭的是「體系與生態(tài)」| 大寶訪談
- 今亮點!究竟是白酒不懂年輕人,還是年輕人不懂白酒?
- 23年8月frm考試時間一覽表,還不知道的快看!
- 【焦點熱聞】為什么短視頻刷多了后,沒有剛開始刷的時候快樂?
- 【環(huán)球新視野】綠地元宇宙指數(shù)G-Meta Index預計下周將探明近期低點
- 同濟復旦一聯(lián)合科研成果入選“2022中國光學十大進展”
- 天天關注:兩家銀行網點證實:深圳二手房貸款不再依據(jù)官方參考價
- 前沿熱點:市值蒸發(fā)163億!寶馬MINI再道歉,卻拉黑網友?多位專家辣評“黑天鵝”事件
- 教育部:畢業(yè)生求職需警惕陷阱
- 最新:耶倫說中方提案“不太認真”,外交部:呼吁美方采取負責態(tài)度,為烏克蘭危機的政治解決作出努力
- 今日最新!比亞迪電子跌超5%,一季度全球智能手機市場同比下跌12%
- 環(huán)球新消息丨【新機】小米Civi3獲認證 充電依然67W 天璣8200打友商778G?
- 焦點滾動:管理規(guī)??s至889億,貴州茅臺重登張坤第一重倉股
- 世界最新:國家郵政局:一季度郵政行業(yè)業(yè)務收入累計完成3562.1億元 同比增長9%
- 麥當勞vs肯德基,誰才是中國人最愛
- 淡馬錫回應減持工商銀行H股:對投資組合再平衡
- 一季度全國網上零售額3.29萬億元,同比增8.6%
- 環(huán)球聚焦:女子疑被騙入傳銷 城管出手相助!
- 老外是員工有無證據(jù)?寶馬:會反饋 基本情況講解
- “東數(shù)”實現(xiàn)“西算”要邁幾道坎
- 德國5月1日起對中國公民重新開放旅游簽證
- 熱門看點:首屆京津冀戶外運動產業(yè)峰會舉辦
- 當前動態(tài):吳艷破抓舉全國紀錄
- 環(huán)球資訊:20家最具潛力的零信任創(chuàng)業(yè)公司
- 熱消息:量旋科技項金根:推動量子計算落地應用,使其成為生產力工具
- 每日頭條!中通快遞:獨立調查已基本完成,做空機構灰熊指控“沒有得到證實”
- 今亮點!中國金雞百花電影節(jié)長期落戶廈門
- 全球頭條:南山集團8億元公司債將付息 利率5.30%
- 環(huán)球即時:宣城加快建設多層次資本市場
- 熱點!媽媽是一名英語老師作文(通用27篇)
- dlc涂層百度百科_dlc涂層是什么意思
- 【天天報資訊】鵝廠是哪個公司 騰訊為什么叫鵝廠愛吃西紅柿的女星_鵝廠是哪個公司
- 天天即時看!處罰決定書編號查詢網丟了_處罰決定書編號查詢網
- 世界微動態(tài)丨首屆中歐綠色創(chuàng)新發(fā)展大會在江門舉辦
- 媽媽和老師英語作文初一(通用49篇)
- 熱文:中國互聯(lián)網絡信息中心官方網站
- 大學英語作文我的媽媽范文(共23篇)
- 全球快播:上汽大通領地新車型上市 售價22.88萬元
- 世界觀察:更顯精致美感 新款吉利ICON主角官圖發(fā)布
- 短尾突吻鰻
- 當前速訊:觀點|奧迪中國溫澤岳:奧迪一汽新能源工廠年底建成
- 全球視訊!股票行情快報:絕味食品(603517)4月21日主力資金凈買入1296.83萬元
- 環(huán)球快報:股票行情快報:宏發(fā)股份(600885)4月21日主力資金凈賣出420.64萬元
- 環(huán)球快播:國v與vl(國v和國vl是什么區(qū)別)
- 股票行情快報:臨港B股(900928)4月21日游資資金凈賣出540.00元
- 世界熱文:民營企業(yè)發(fā)展特寫:轉變、創(chuàng)新、追求
- 【世界報資訊】蜘蛛有幾只眼睛(蜘蛛有幾只眼睛)
- 全球新消息丨賽爾號元神珠孵化芯片(賽爾號元神珠)
- 環(huán)球百事通!新手養(yǎng)貓注意事項初學者養(yǎng)貓注意事項(新手養(yǎng)貓注意事項)
- 信訪干部培訓工作計劃表(合集14篇)
- 動態(tài):商務談判的工作計劃范文(優(yōu)選12篇)
- 當前通訊!平安健康發(fā)布《中國中小企業(yè)家健康管理認知研究報告》
- 環(huán)球看點!縣政府小食堂工作計劃(合集4篇)
- 寶馬MINI展臺仍在發(fā)放小禮品 基本信息講解
- 環(huán)球今日訊!受資金青睞 多只銀行股走強
- 全球微資訊!女子吐槽軟臥車廂分配3男1女 基本信息講解
- 世界今頭條!規(guī)范旅游市場價格 北京市開展專項執(zhí)法
- 通訊!寶馬mini展臺不發(fā)冰淇淋改發(fā)鑰匙扣 基本情況講解
- 國安顧問宣布辭職 巴西總統(tǒng)盧拉已同意
- 世界關注:今年市場監(jiān)管總局嚴打8類違法行為
- 環(huán)球微速訊:360借條網貸逾期了會不會起訴