成交使用已客户为维度的多线程成交.
// 方法名为虚拟捏造, 并非实际使用方法名
成交方法 chengjiao() 为独立事务;
chengjiao() 方法内使用多线程的嵌套事务 NESTED...002&002;
但是问题出在线程的执行顺序;
两个客户每个人在不同渠道买了一笔, 一共四笔交易记录;
线程A先去更新了 001 & 002 这条记录
线程B先去更新了 002 & 002 这条记录...之后
线程B又去更新 001 & 002 这条记录; (问题在这已经出现)
线程A去更新 002 & 002 这条记录;
后续的线程B在更新的时候, 在等待这条记录之前的UPDATE事务提交或回滚...最后在12月3号, 4笔交易成交了. 4个工作日.问题影响… 客户是拒绝的… 不过好在客户大度, 没有计较. … …
至此将问题从生产日志取下, 分析, 复现, 解决,重新上线 共计 2周+, 期间对spring...隔离性 (可能导致死锁) 简单来说, 两个事务在同时进行更新时,一个事务在更新, 另一个事务需要操作时,不可能看到这条记录之前的值, 需要等到之前的事务要么执行(事务提交),要么不执行(事务回滚