当前在循环内的事务中存在事务死锁:
def method() {
attemptIds.each { attemptId ->
Attempt.withTransaction {
def attempt = Attempt.findById(attemptId, [lock:true])
attempt.refresh()
//modify attempt and save
}
}
}
此方法属于非事务性服务。并且该方法被同时调用。列表中的attemptId可能在attemptIds中重复/不唯一。
因此尝试的处理应该阻止处理相同尝试的其他线程。
我们将事务包含在循环中,认为它会立即提交事务,让其他线程更新先前锁定的尝试。
日志表明,findBy查询被另一个查询阻止,反之亦然,我不知道这是怎么回事。
为什么你认为发生了僵局?