访问相同数据库资源的多个java spring app实例

时间:2016-01-31 13:25:58

标签: java database spring concurrency queue

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

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

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

执行该约束的不同方法有哪些?

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

1 个答案:

答案 0 :(得分:1)

您可以使用锁定策略强制执行对表中特定记录的访问权限。有两种不同的方法可用于满足此要求。乐观锁定或悲观锁定,请看hibernate docs

另外,还有另一个你应该想到的问题。使用当前方法,如果服务器在处理某个记录期间崩溃并最终无法成功完成,则该记录将保持“不完整”状态,并且不会被其他人处理。我想到的一个可能的解决方案是使用负责处理而不是状态标志的服务器的“节点ID”。