【发布时间】:2018-01-14 14:27:53
【问题描述】:
我在我的 SpringBoot 应用程序中使用 JPA 存储库我有一个后台任务,它定期将我的数据库中的某些元素设置为“就绪” 我还有一个用户可以调用的端点,它可以修改同一个表的行之一。
有没有办法避免一个又一个取消对方的写入?以这种情况为例
Table:
Key
id name is_ready
0) 初始数据有一个键(1 no_name false)
1)后台任务启动,即将通过设置修改表Key
is_ready to true
Key key = repo.findKeyByIsReady(false)
key.setIsReady(true)
repo.save(key) <--- does NOT yet execute this
2) 用户调用 api 端点将键名更改为“new_name”并完成
3) 现在后台服务执行repo.save(key),最终数据为
1 no_name true
而不是
1 new_name true
基本上后台任务已经覆盖了用户设置的键名
有没有办法避免这种情况?交易在这里有什么帮助?
【问题讨论】:
标签: java mysql jpa concurrency transactions