mongodb为什么会更新失败
这篇文章将为大家详细讲解有关mongodb为什么会更新失败,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
现象:
WriteResultres=mongoTemplate.updateFirst(query,updateObj,"ServerToAgentReq_SMS");
获取res.getN()返回值时,发现偶尔情况下该返回值为0,表示该更新操作没有更新到任何数据。并且如果是多线程并发更新,失败几率大大提高。
官网表示不能保证更新操作的成功性....
方案:
一次失败后,另起线程多次重试。
privateThreadPoolExecutorexec=newThreadPoolExecutor(2,10,3,TimeUnit.SECONDS,newArrayBlockingQueue<Runnable>(10),newThreadPoolExecutor.CallerRunsPolicy());主要代码:WriteResultres=mongoTemplate.updateFirst(query,updateObj,"ServerToAgentReq_SMS");//如果更新失败,进入其他线程重试更新if(res.getN()==0){exec.execute(newRunnable(){@Overridepublicvoidrun(){intnum=0;WriteResultres=mongoTemplate.updateFirst(query,updateObj,"ServerToAgentReq_SMS");while(res.getN()==0&&num<100){res=mongoTemplate.updateFirst(query,updateObj,"ServerToAgentReq_SMS");num++;try{Thread.sleep(300);}catch(InterruptedExceptione){logger.error("响应更新失败{}",e);}}if(res.getN()==0){logger.error("响应更新失败!!!gwMsgId:{},masMsgId:{}",gwMsgId,masMsgId);}}});
如此失败率,大大减少。
关于mongodb为什么会更新失败就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。