maa*_*nus 5 java concurrency hibernate transactions
我正在使用PostUpdateEventListener注册的via
registry.appendListeners(EventType.POST_COMMIT_UPDATE, listener)
Run Code Online (Sandbox Code Playgroud)
以及其他一些听众,以便跟踪Hibernate所做的更改.这很好用,但是,我看到一个问题:
比方说,对于跟踪一些amount通过id,我简单地执行
amountByIdConcurrentMap.put(id, amount);
Run Code Online (Sandbox Code Playgroud)
在每一个POST_COMMIT_UPDATE(让我们忽略其他操作).问题是这个调用在提交后的某个时间发生.因此,两个提交一个接一个地写一个相同的实体,我可以以错误的顺序接收事件,最终amount存储旧的.
稍后提出两个问题和一个建议
您确定需要这种优化吗?为什么不通过查询来获取写入数据库的金额。是什么让您有理由使用缓存。
如何确保在将金额写入数据库之前的金额计算已正确同步,以便多个线程或可能的节点不会使用旧数据来计算金额,从而覆盖以后计算的结果?
我想你第 2 个问题的处理是正确的。然后你必须选择:
| 归档时间: |
|
| 查看次数: |
294 次 |
| 最近记录: |