Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果服务在群集模式下运行,则隔离地从数据库读取_Java_Database_Mongodb_Scheduled Tasks - Fatal编程技术网

Java 如果服务在群集模式下运行,则隔离地从数据库读取

Java 如果服务在群集模式下运行,则隔离地从数据库读取,java,database,mongodb,scheduled-tasks,Java,Database,Mongodb,Scheduled Tasks,我正在做一个调度程序。我使用spring计划每隔2分钟运行一次作业。我扫描数据库以查找挂起的任务并执行它们 如果我的服务只有一个实例,那么这样做很好。我必须部署多个服务实例 我遇到这样的情况:两个实例运行相同的作业,因为每个实例都从数据库中读取相同的作业。它会被执行两次 我使用mongodb来维护作业及其状态。 如何确保所有实例都执行不同的作业?将作业更新为已处理的状态?如果两个服务同时读取相同的记录,则其中一个无法更新该记录,因为另一个已更新该记录?更新不成问题。两个服务一起读取任务并开始执行

我正在做一个调度程序。我使用spring计划每隔2分钟运行一次作业。我扫描数据库以查找挂起的任务并执行它们

如果我的服务只有一个实例,那么这样做很好。我必须部署多个服务实例

我遇到这样的情况:两个实例运行相同的作业,因为每个实例都从数据库中读取相同的作业。它会被执行两次

我使用mongodb来维护作业及其状态。
如何确保所有实例都执行不同的作业?

将作业更新为已处理的状态?如果两个服务同时读取相同的记录,则其中一个无法更新该记录,因为另一个已更新该记录?更新不成问题。两个服务一起读取任务并开始执行。那么这是一个问题更新不是问题,而是解决方案。因为数据库中只能有一个值,所以可以使用它来标记作业已被执行(=第二个作业无法再更新它),或者在那里更新处理程序id。或者其他类似的东西,让你知道该由谁来处理这项工作。