我有一个复杂的业务Web应用程序,它接收到多个并发请求。其中一个请求是处理新发票。如果同时接收到多个这样的请求,则至少有一个请求将由于以下错误Transaction (Process ID X) was deadlocked on lock resources
而发生回滚。
我已经浏览了很多关于这个主题的StackOverflow条目,但是没有一个给我一个解决方案。我试着打开SNAPSHOT ISOLATION
,但是没有任何变化。我试着重新排序我的代码,但是没有用。用户https://stackoverflow.com/users/1560836/user1560836在Correct way to handle deadlocks in Hibernate上评论说这个问题根本没有解决方案,看起来很有可能。但是,我还是觉得很难相信,这些框架是如何被使用
有没有人有一个建议或可能的解决方案?还有,你有一个解决方案,至少监测这些事件?任何帮助将不胜感激。
1条答案
按热度按时间ie3xauqp1#
对于任何发现自己处于与我同样困境的人来说,迄今为止销售了大多数问题的解决方案是使用
Optimistic Locking
。遵循这个非常有用的Baeldung guide,我设法以一种非常优雅的方式解决了我的问题。1.将
bigint
字段添加到在通常死锁的事务中修改的表中(数据库方面)1.将
@Version
添加到JPA模型有了一个相当简单的解决方案,我大部分陷入僵局的问题都消失了。希望这对其他人有帮助。