欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

事務(wù)注解(@Transactional)引起的數(shù)據(jù)覆蓋故障-創(chuàng)新互聯(lián)

最近組織團(tuán)隊(duì)內(nèi)技術(shù)培訓(xùn),劉聰為分享的一個(gè)跟事務(wù)和寫數(shù)據(jù)庫(kù)相關(guān)的case(bug)很有代表性。用事務(wù),要小心!

從策劃到設(shè)計(jì)制作,每一步都追求做到細(xì)膩,制作可持續(xù)發(fā)展的企業(yè)網(wǎng)站。為客戶提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、網(wǎng)站策劃、網(wǎng)頁設(shè)計(jì)、域名注冊(cè)、雅安服務(wù)器托管、網(wǎng)絡(luò)營(yíng)銷、VI設(shè)計(jì)、 網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,以客戶的口碑塑造優(yōu)易品牌,攜手廣大客戶,共同發(fā)展進(jìn)步。

一、故障現(xiàn)象

車輛交付履約流程上兩個(gè)節(jié)點(diǎn)(工程項(xiàng)目)A和B, A修改一條數(shù)據(jù)記錄item(工單),然后發(fā)消息給B,B也會(huì)對(duì)item進(jìn)行修改。

故障現(xiàn)象,有時(shí)候(不是必現(xiàn))感覺A沒有成功修改item這條數(shù)據(jù),而日志顯示A修改成功了數(shù)據(jù)item!

看一下具體代碼實(shí)現(xiàn)。下圖是工程A代碼,3個(gè)紅框依次動(dòng)作。

1、開啟事務(wù)

2、修改工單記錄item

3、向下游節(jié)點(diǎn)發(fā)送mq消息 

事務(wù)注解(@Transactional)引起的數(shù)據(jù)覆蓋故障

下圖是下游消費(fèi)mq消息的節(jié)點(diǎn)B,紅框表示采用JPA技術(shù)修改數(shù)據(jù)記錄item

事務(wù)注解(@Transactional)引起的數(shù)據(jù)覆蓋故障

二、原因分析

這個(gè)過程總共經(jīng)歷5個(gè)步驟,見下圖 

事務(wù)注解(@Transactional)引起的數(shù)據(jù)覆蓋故障

1、節(jié)點(diǎn)A開啟一個(gè)事務(wù),修改數(shù)據(jù)表中某條數(shù)據(jù)item

2、A向B發(fā)送mq消息,再做些其他事情,提交事務(wù)

3、節(jié)點(diǎn)B,消費(fèi)mq消息

4、節(jié)點(diǎn)B讀出數(shù)據(jù)item

5、節(jié)點(diǎn)B在內(nèi)存中修改數(shù)據(jù)item某些字段,寫回?cái)?shù)據(jù)庫(kù)

注意到第1、2步驟是在一個(gè)事務(wù)中。存在一種可能,B節(jié)點(diǎn)收到mq消息,執(zhí)行第4步驟,讀取item數(shù)據(jù)后,步驟1、2的事務(wù)才完成提交。由于數(shù)據(jù)庫(kù)事務(wù)隔離級(jí)別,這種情況下,第4步驟讀到的數(shù)據(jù)并不是A節(jié)點(diǎn)在第1步寫的,已經(jīng)讀到臟數(shù)據(jù)了。當(dāng)?shù)?步寫回?cái)?shù)據(jù)的時(shí)候,就可能造成老數(shù)據(jù)覆蓋A寫的新數(shù)據(jù)。

這里有兩個(gè)細(xì)分場(chǎng)景

1、第1步、第5步修改同一個(gè)字段。這種情況,第4步驟讀到臟數(shù)據(jù) 

事務(wù)注解(@Transactional)引起的數(shù)據(jù)覆蓋故障

2、第1步、第5步修改不同字段。第4步讀到col2字段的oldvalue,第5步目的是修改col3的值,但是采用jpa或者mybatis的一些默認(rèn)寫法,會(huì)把col2的oldvalue更新回?cái)?shù)據(jù)庫(kù)。

一般的ORMapping框架利用一個(gè)vo對(duì)象寫數(shù)據(jù)庫(kù)記錄,沒有修改的字段不會(huì)更新(代碼里并沒有改col2的值),但是第4步讀取數(shù)據(jù)后,第1步對(duì)數(shù)據(jù)item進(jìn)行了修改。這樣默認(rèn)的寫庫(kù)方法,會(huì)check記錄的變化,然后把col2字段的值更新。這樣就出現(xiàn)了舊值覆蓋新值的問題。 

事務(wù)注解(@Transactional)引起的數(shù)據(jù)覆蓋故障

三、解決辦法

1、考慮到實(shí)施成本,如果修改不同的字段,不存在競(jìng)爭(zhēng)關(guān)系。只需要在第5步寫庫(kù)的環(huán)節(jié)指定更新字段就能快速解決這個(gè)問題。事實(shí)上,生產(chǎn)環(huán)境下也是選擇的這個(gè)方案臨時(shí)修復(fù)。

2、解決辦法1顯然不夠優(yōu)秀。更好的做法,把第2步發(fā)mq消息從事務(wù)中拆出來,等第1步操作commit后在發(fā)mq消息。這個(gè)辦法涉及到一些邏輯的梳理(業(yè)務(wù)代碼里會(huì)有不少的if……else),代碼的改動(dòng)。這樣處理仍然不夠完美,第1步執(zhí)行完了,第2步失敗了怎么辦?在這里可能需要一些額外的代碼工作保證第2步執(zhí)行成功。

3、如果業(yè)務(wù)壓力不大,也可以考慮從數(shù)據(jù)庫(kù)的事務(wù)隔離級(jí)別方面入手來解決這個(gè)問題。

4、業(yè)務(wù)上,第1步到第5步如果需要強(qiáng)一致,了解一下分布式事務(wù)

https://www.jianshu.com/p/16b1baf015e8

分享文章:事務(wù)注解(@Transactional)引起的數(shù)據(jù)覆蓋故障-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://aaarwkj.com/article34/ihpse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、網(wǎng)站策劃、App設(shè)計(jì)靜態(tài)網(wǎng)站、虛擬主機(jī)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司
天天操夜夜操白天操晚上操| 日本人妻精品在线观看| 欧美日韩天堂一区二区| 亚洲精品综合在线二区| 成人激情电影免费在线| 在线观看91精品国产秒播| 日韩一二区不卡在线视频| 色人阁在线精品免费视频| av在线视频男人的天堂 | 伊人亚洲一区二区三区| 毛片一区二区三区免费看| 传媒精品视频在线观看| 99热精品免费在线观看| 熟妇人妻中文字幕在线| 久久久久久国产精彩视频| 亚洲 综合 久久久| 美女张开腿让男人插进去| 日本特黄特色三级在线观看| 91午夜福利视频在线观看| 亚洲欧美日韩午夜在线| 亚洲一区二区三区熟妇| 少妇午夜福利一区二区| 麻豆国产国语精品三级在线观看| 精品欧美一区二区三久久| 成人午夜激情四射av| 最新国产激情福利网站| 歪歪私人影院午夜毛片| 久久热在线视频精品视频| 亚洲男人天堂最新地址| 久久精品亚洲熟女av蜜臀| 东京热加勒比在线播放| 真实夫妻露脸爱视频九色网| 一区二区三区三级视频| 国产亚洲一区二区三区午夜| 日韩特级黄片在线免费观看| 亚洲国产精品va在线香蕉| 亚洲国产成人综合一区二区三区| 青青草国产成人自拍视频在线观看| 欧美精品一区二区毛卡片| 午夜影院在线观看网站| 日日躁夜夜躁狠狠躁欧美|