【发布时间】:2018-04-11 11:06:01
【问题描述】:
现在我正在阻止来自多个实例的多个用户使用 PESSIMISTIC_WRITE 锁访问我的数据库表的同一行。锁定行的事务具有默认的隔离级别设置,即 REPEATABLE_READ。
在表格为空的情况下,它会被新条目重新填充,这会变得很奇怪。插入是在单独的事务中运行的异步批量插入。因此,当提交此数据时,用户会读取一行以进行更新,这应该锁定该行。不知何故,这不再起作用,并且多个用户能够从同一行获取值。
在尝试解决这个问题时,我将隔离级别更改为 READ_COMMITED,问题不再出现。
有人能告诉我这是怎么可能的吗?我错过了什么?
这里有一些伪代码以便更好地理解:
异步充值
Transaction
get values to insert
bulk insert
获取价值
Transaction
read a row for update (Locks it)
do stuff
delete the row
对于锁定,我们使用来自 spring 数据的这个注解:
@Lock(LockModeType.PESSIMISTIC_WRITE)
【问题讨论】:
标签: mysql spring-data isolation-level pessimistic-locking amazon-aurora