gpt4 book ai didi

java - 同步spring事务

转载 作者:行者123 更新时间:2023-11-29 08:12:44 26 4
gpt4 key购买 nike

我们在我们的项目中使用了 Spring 和 Hibernate,并且有一个分层的架构。 Controller -> 服务 -> 管理器 -> Dao。事务从管理层开始。服务层中更新数据库中对象的方法被许多线程调用,这导致抛出陈旧对象预期。所以我使这个方法同步并且仍然看到抛出的陈旧对象异常。我在这里做错了什么?有更好的方法来处理这种情况吗?

提前感谢您的帮助。

最佳答案

当实体在读取时间和更新时间之间被修改时,将抛出陈旧对象异常。这可能发生在单个事务中,但也可能发生在您读取事务中的对象、修改它(例如,在 Controller 层),然后启动另一个事务并合并/更新它(在这种情况下,几分钟或几小时)可以分开读取和更新)。

抛出异常是为了帮助您避免用户之间的冲突。

如果您不关心冲突(即最后一次更新总是获胜并替换之前的更新),那么不要使用乐观锁定。如果您担心冲突,那么 StaleObjectExceptions 就会发生,您应该向最终用户弹出一条有意义的消息,要求他重新加载数据并再次尝试修改它。没有办法避免它们。您必须保持乐观,并希望它们不会经常发生。

请注意,您的同步技巧只有在以下情况下才会起作用

  • 只有在同一事务中读取和写入时才会发生异常
  • 实体的更新仅由该服务进行
  • 您的应用程序未集群化。

它还可能会显着降低吞吐量,因为您禁止任何并发更新,无论并发事务更新了哪些实体。这就像您在整个事务期间锁定了整个表。

关于java - 同步spring事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7110331/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com