问题描述
我还有一个使用 Spring Boot 和 Kotlin(Restful Services)构建的应用程序,每次进行交易时都需要更新余额表,但该应用程序支持来自同一应用程序实例下的同一用户的多个同时连接,这里是我有问题的地方。
我有一个使用 R2dbcEntityTemplate 的数据更新方法:
此方法从表中读取当前余额,并基于此在每次进行交易时进行折扣,但是,如果用户并行执行多个请求,那么这些请求中的几个可以读取相同的平衡并错误地打折,例如:
我想要做的是“并发更新安全”,但是,使用 R2dbc 的 API:
update balance
SET balance = balance - @amount
WHERE user = @user