mongodb写操作无响应

问题:mongodb写操作无响应,导致程序一直等待无法往下运行,无异常抛出。

原因:mongodb使用了集群,其中主服务器挂掉,配置中WriteConcern抛出异常的级别是MAJORITY,主服务器无响应,导致写操作一直等待主服务器的影响,不继续执行或抛出异常。

解决方案:修改WriteConcern抛出异常的级别,write-concern="SAFE"

<mongo:mongo-client id="mongoClient" replica-set="${mongo.hostport}">

</mongo:mongo-client>

<mongo:db-factory id="mongoDbFactory" dbname="${mongo.dbName}" mongo-ref="mongoClient" />

<!--WriteConcern的几种抛出异常的级别参数:

WriteConcern.NONE:没有异常抛出

WriteConcern.NORMAL:仅抛出网络错误异常,没有服务器错误异常

WriteConcern.SAFE:抛出网络错误异常、服务器错误异常;并等待服务器完成写操作。(建议集群时使用此参数)

WriteConcern.MAJORITY: 抛出网络错误异常、服务器错误异常;并等待一个主服务器完成写操作。(集群时使用此参数,如果主服务器挂掉,则程序会一直等待主程序响应,导致程序无法继续运行)

WriteConcern.FSYNC_SAFE: 抛出网络错误异常、服务器错误异常;写操作等待服务器将数据刷新到磁盘。

WriteConcern.JOURNAL_SAFE:抛出网络错误异常、服务器错误异常;写操作等待服务器提交到磁盘的日志文件。

WriteConcern.REPLICAS_SAFE:抛出网络错误异常、服务器错误异常;等待至少2台服务器完成写操作。 -->

<mongo:template id="mongoTemplate" db-factory-ref="mongoDbFactory" write-concern="SAFE" />

猜你喜欢

转载自my.oschina.net/u/3865831/blog/1838201