环境:国土交易系统网上出价、限时竞价阶段同一个时间点多人出价,需要保证金额大的竞买人一定能出价,并且时间在排序列表中也最大。
为了防止幻读在service层方法上加了synchronized还是出现了幻读的情况
解决办法 把synchronized加到Controller层或者大于事务边界的调用层
原因 使用了spring aop事务,事务提交在一个service方法执行完毕后,可能事务还没有提交,
这时候另外一个线程开始执行synchronized方法导致并发问题出现
代码片段如下:Controller
private static Object lock=new Object();
//保存出价信息
synchronized(lock){
saveFlag=limitBidBiz.saveBusLimitBidInfo(user.getPkId(), moneyDouble, busId,cert,user.getOrgId(), getRequest(