解決mongodb transaction WriteConflict問題

最近在項目嘗試使用Mongodb的事務特性
發現遇到了一個坑
org.springframework.data.mongodb.UncategorizedMongoDbException: Command failed with error 112 (WriteConflict): 'WriteConflict'
在併發操做同一個文檔的時候,有機率會出現上面這個提示
而後在重試以後就會沒有spring

分析

通過查詢資料,發現上面的問題是由一個參數引發的
maxTransactionLockRequestTimeoutMillis
這參數是事務鎖最大等待事件(毫秒)
官網連接(maxTransactionLockRequestTimeoutMillis)
這個參數默認值爲5(毫秒),也就意味着獲取鎖超出了這個時間就會提示WriteConflictmongodb

解決

方式一:使用這個能夠在線修改這個值服務器

db.adminCommand( { setParameter: 1, maxTransactionLockRequestTimeoutMillis: 3000 } );

方式二:啓動的時候加入參數併發

mongod --setParameter maxTransactionLockRequestTimeoutMillis=3000

方式三:在(/etc/mongod.cnf)中加入一下配置code

setParameter = maxTransactionLockRequestTimeoutMillis=3000

其中3000爲最大鎖等待時間,可自由調配事件

集羣

若是是副本集分片建議在每臺服務器都執行相同的配置事務

加完這個參數建議重啓一下應用文檔

相關文章
相關標籤/搜索