问题背景:
最近因为经济下滑,导致公司没有以前那么多的借款人,借款金额少,投资人就需要抢。
以下代码只是例子,不代表真实代码。
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
问题解决