最近在項目嘗試使用Mongodb的事務特性
發現遇到了一個坑org.springframework.data.mongodb.UncategorizedMongoDbException: Command failed with error 112 (WriteConflict): 'WriteConflict'
在併發操做同一個文檔的時候,有機率會出現上面這個提示
而後在重試以後就會沒有spring
通過查詢資料,發現上面的問題是由一個參數引發的maxTransactionLockRequestTimeoutMillis
這參數是事務鎖最大等待事件(毫秒)
官網連接(maxTransactionLockRequestTimeoutMillis)
這個參數默認值爲5(毫秒),也就意味着獲取鎖超出了這個時間就會提示WriteConflict
mongodb
方式一:使用這個能夠在線修改這個值服務器
db.adminCommand( { setParameter: 1, maxTransactionLockRequestTimeoutMillis: 3000 } );
方式二:啓動的時候加入參數併發
mongod --setParameter maxTransactionLockRequestTimeoutMillis=3000
方式三:在(/etc/mongod.cnf
)中加入一下配置code
setParameter = maxTransactionLockRequestTimeoutMillis=3000
其中3000
爲最大鎖等待時間,可自由調配事件
若是是副本集
或分片
建議在每臺服務器都執行相同的配置事務
加完這個參數建議重啓一下應用文檔