这篇文章将为大家详细讲解有关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为什么会更新失败就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。