gpt4 book ai didi

java - 如何在 Oracle 中回滚/超时 “select for update” 锁?

转载 作者:行者123 更新时间:2023-11-30 09:27:38 25 4
gpt4 key购买 nike

我们的应用程序主要使用 Hibernate 的版本控制支持的乐观锁定。我们计划在一种特定情况下实现悲观锁定。我对悲观锁定没有太多经验,所以如果这个问题听起来很幼稚,请原谅。

当用户显示更新条目的意图时 - 我们使用“select for update”锁定相应的数据库行。现在,如果这个用户花了很长时间来提交他的更改在锁定后忘记了它,我们如何使用一些超时/回滚机制解锁这个锁?这样该行就不会长时间处于锁定状态并不允许所有其他用户对其进行编辑。

我怀疑这是否会在我们使用的 Weblogic-JTA-Spring 事务机制中得到处理——我们已经有 30 分钟的事务超时。 (??)

那么,这个回滚是否应该直接在 Oracle 级别处理。如果是,那么如何?请建议处理此问题的最佳方法,以便此类锁不会逗留太久。

最佳答案

只有在事务结束时才会释放锁。当向数据库发出显式 commitrollback 或数据库 session 终止时(执行隐式 rollback ),事务将结束).如果您的中间层已设置为回滚任何打开时间超过 30 分钟的事务,则足以释放锁。

但是,如果您有一个在 Weblogic 应用程序服务器上运行的 Java 应用程序,我觉得悲观锁定是不合适的。首先,我假设您在中间层使用连接池。如果是这种情况,那么连接池中的一个数据库连接将需要由中间层在整个事务期间保持(在本例中最多 30 分钟)。但是允许一个 session 在一段较长的时间内保持打开一个特定的数据库 session 违背了拥有连接池的目的。通常,即使不是数百个应用程序 session ,也有数十个可以共享来自连接池的单个连接——如果您要允许悲观锁定,那么您现在将在这些 session 的应用程序 session 和数据库 session 之间强制建立 1:1 的关系。

关于java - 如何在 Oracle 中回滚/超时 “select for update” 锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14493912/

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