【问题标题】:multiple java spring app instances accessing the same DB resources多个 java spring 应用程序实例访问相同的数据库资源
【发布时间】:2016-01-31 13:25:57
【问题描述】:

在我的数据库中,我的 java spring 应用程序需要不时处理某个表的许多记录。 该表的每一行都有一个布尔标志,表示当前是否正在处理给定的记录。

我正在查看的是在不同的服务器上多次部署我的 java spring 应用程序,所有这些都访问同一个共享数据库,同一个应用程序与一些负载平衡器重复,等等。

但一次只有一个 Java 应用程序实例可以处理该特定表的给定数据库记录。

执行该约束的不同方法是什么?

我可以想到一些独特的队列,它将这些处理任务分派给不同的 java 运行实例,确保两个不同的 java 实例不会同时处理相同的 DB 记录。但这听起来很复杂。也许有更简单的东西?还要别的吗?提前致谢。

【问题讨论】:

  • 数据库管理系统(DBMS)有责任关心一个记录被一个连接访问。
  • 我的意思是,有一段时间,只有一个 java 实例应该拥有对该资源的独占访问权限(对其进行多次更新并排除所有其他 java 实例以在这 5 分钟内访问它)。

标签: java database spring concurrency queue


【解决方案1】:

您可以使用锁定策略来强制访问表中特定记录的排他性。有 2 种不同的方法可用于达到此要求。乐观锁还是悲观锁,看看hibernate docs

此外,您还应该考虑另一个问题。用目前的方法,如果服务器在处理某条记录的过程中发生崩溃,最终无法成功完成,那么这条记录将保持“不完整”状态,不会被其他人处理。我想到的一种可能的解决方案是使用负责处理而不是状态标志的服务器的“节点 ID”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 2019-04-30
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    • 2015-07-17
    相关资源
    最近更新 更多