1. 程式人生 > >mongodb寫操作無響應

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" />