记一次线上并发问题
問題背景:
最近因為經濟下滑,導致公司沒有以前那么多的借款人,借款金額少,投資人就需要搶。
以下代碼只是例子,不代表真實代碼。
public void updateTenderRealAmount(Long id){
xxx.update(id);
xxx.selectById(id);
// 一堆邏輯判斷
// 更新整個對象
xxx.update(xxx)
}
按照邏輯:
A事務先來,B事務再來,正常邏輯
A開啟事務,B等待
A提交,B進入,B提交
事實:
A進方法,數據庫開啟行鎖,
B進方法,等待行鎖,A釋放行鎖,B更新
A 查詢 拿到B更新的數據
更新? 數據出錯。
排查線上代碼,發現從Controller 調服務 不走事務,
但是從服務直接調其他服務又會走事務
查詢問題發現,使用dubbo2.8.4 并不是官方發布,我們從2.8.4換成2.5.10
問題解決
轉載于:https://juejin.im/post/5c7a0d41f265da2d9c3889d8
總結
- 上一篇: flask中的CBV和FBV
- 下一篇: 开发直播APP软件一定要了解的H.264