我希望了解在同一用户对同一个Spring Controller方法的并发请求的情况下如何确保数据完整性?
例如,在在线购物场景中,用户恰好在做 对Controller方法的并发请求 (例如'/ debitWallet?amount = 100'扣除他的钱包钱)。该 'Wallet'可以是用这种方法获得的休眠实体 通过标准的“WalletService”实例 - >'WalletDao'实例。 现在我们如何确保钱包的数据完整性以实现并发 请求?
- 我在这里同步哪些对象?
- 不同bean(服务,dao等)的范围是什么,虽然我没有看到任何有用的方法,因为钱包将从数据存储中取出?
- 每次调用Controller方法时,我是否应该从数据库中获取Wallet。这是一种正确的方法吗?相反,我应该在这个钱包实体上使用@SessionAttribute&然后将它用于此方法的每个请求?
我真的可以在这里使用一些帮助来了解如何解决此用例中的数据完整性问题?
答案 0 :(得分:0)
首先回答这个问题:您的数据更改频率有多高?
如果不是那么频繁(或者您的数据库迭代很快),您可以使用模式:"用户始终使用最近的钱包实例进行操作,该实例经常与数据库"同步。为了使它工作,用户总是发送Optimistick锁定值(实体上的@Version字段),如果后台发生了变化:用户收到Optimistick锁定异常。
如果频繁,你应该深入分析你的实现,然后 - 搜索地点进行同步。甚至可以修改你的API。