如何通过2个Springboot服务实例从共享位置并行访问文件?

时间:2019-06-17 11:20:43

标签: java spring-boot parallel-processing instance readfile

Spring Boot服务有2个实例,它们读取到特定位置的文件。如果在该位置添加了新文件,则两个服务将一起读取该文件。目的是两个实例应并行处理新文件。

我已经尝试过锁定机制。它会锁定文件,并且一个实例读取一个文件,而第二个实例直到释放锁定后才读取任何新文件。

1 个答案:

答案 0 :(得分:0)

我将遵循以下简单选项之一。

  1. 保留已处理文件的列表:想法是将已处理文件的完整路径写入另一个文件,数据库表甚至内存空间中。 首先读取文件的服务将首先在该空间中创建一个条目。用于标记文件。其他服务在开始处理新创建的文件之前会先查找文件的路径。但由于它已经存在,因此将无法继续进行。

  2. 移动已处理的文件:创建一个文件夹来存储已处理的文件。该服务首先读取文件,然后将文件移到该处并进行处理。其他服务将无法读取该文件。顺便说一句,如果不允许您移动文件,此选项可能不可行。在这种情况下,请尝试制作该文件的副本。

  3. 复制已处理的文件:类似于第1项。在文件夹中复制文件。该服务先读取文件,然后再将文件复制到此处并继续。其他服务在该副本文件夹中查找文件的名称(或其他标识符)。因为它已经存在,所以将无法继续。

可以产生许多其他变体,但是基本思想是标记该文件路径,以便它已被处理或在进行中。

请注意,如果无法完成对文件的处理,则必须回滚。根据您选择的选项,您需要删除列表中的记录,或者将文件移回原始目录,或者删除该文件的副本。