spring - 并发更新
问题描述
我在 MySQL 中有一个存储用户余额的表:
我还有一个使用 Spring Boot 和 Kotlin(Restful 服务)构建的应用程序,每次进行交易时都需要更新余额表,但是该应用程序支持来自同一应用程序实例下同一用户的多个同时连接,这里是我有问题。
我有一个使用 R2dbcEntityTemplate 的数据更新方法:
此方法从表中读取当前余额,并基于此在每次进行交易时进行折扣,但是,如果用户并行执行多个请求,则恰好其中几个请求可以读取相同的余额并进行折扣不正确,例如:
我想做的是“并发更新安全”,但是,使用 R2dbc 的 API:
update balance
SET balance = balance - @amount
WHERE user = @user
解决方案
推荐阅读
- python - 在不等待加入的情况下杀死一个线程
- java - Azure cosmosdb Async java中的理想“RequestOptions”值?
- c# - 表单提交失败后发回敏感信息的安全问题
- cmake - CMAKE_INSTALL_RPATH_USE_LINK_PATH 没有任何影响
- wordpress - Wordpress:将所有帖子(项目)重定向到特定页面
- java - 使用 Java 将 Oracle Blob 内容插入另一条记录时出现问题
- javascript - 是否可以更改语义-ui-dropdown 上的“添加”文本?
- angular - ng-bootstrap popover 增加页面宽度
- c++ - c++ 使用 c 样式数组聚合初始化
- javascript - 将 npm 包与 webpack 捆绑,但排除所有供应商包