【发布时间】:2020-09-25 02:44:54
【问题描述】:
(使用带有 MySQL 8.0 的 Spring Boot 2.3.3。)
假设我有一个包含total 字段的Account 实体,其中一个帐户实体代表某种主帐户。 IE。 主账户 的total 字段几乎在每笔交易中都会更新,重要的是,对该total 字段的任何更新都是在最近的值上完成的。
在这样的交易中哪个是更好的选择:
-
使用
PESSIMISTIC_WRITE锁,获取主账户,增加total 字段,然后提交事务。或者, -
是否有一个专门的查询,该查询本质上是像
UPDATE Account SET total = total + x这样的交易的一部分?我假设在这种情况下对于 UPDATE 查询我仍然需要相同的悲观锁,例如通过@Query和@Lock。
此外,由于锁定获取超时(或其他基于锁定的异常)而重试失败的事务一定次数是一种反模式吗?还是让它失败,报告给客户端,让客户端再次尝试调用事务/服务更好?
为这个基本问题道歉,但是,我已经有一段时间没有担心在 Spring 中做这样的事情了。
提前致谢!
【问题讨论】:
标签: mysql spring spring-boot spring-data-jpa pessimistic-locking