解决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为最大锁等待时间,可自由调配事件

集群

若是是副本集分片建议在每台服务器都执行相同的配置事务

加完这个参数建议重启一下应用文档

相关文章
相关标签/搜索