最近在项目尝试使用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
为最大锁等待时间,可自由调配事件
若是是副本集
或分片
建议在每台服务器都执行相同的配置事务
加完这个参数建议重启一下应用文档