Spring Boot服务有2个实例,它们读取到特定位置的文件。如果在该位置添加了新文件,则两个服务将一起读取该文件。目的是两个实例应并行处理新文件。
我已经尝试过锁定机制。它会锁定文件,并且一个实例读取一个文件,而第二个实例直到释放锁定后才读取任何新文件。
答案 0 :(得分:0)
我将遵循以下简单选项之一。
保留已处理文件的列表:想法是将已处理文件的完整路径写入另一个文件,数据库表甚至内存空间中。 首先读取文件的服务将首先在该空间中创建一个条目。用于标记文件。其他服务在开始处理新创建的文件之前会先查找文件的路径。但由于它已经存在,因此将无法继续进行。
移动已处理的文件:创建一个文件夹来存储已处理的文件。该服务首先读取文件,然后将文件移到该处并进行处理。其他服务将无法读取该文件。顺便说一句,如果不允许您移动文件,此选项可能不可行。在这种情况下,请尝试制作该文件的副本。
复制已处理的文件:类似于第1项。在文件夹中复制文件。该服务先读取文件,然后再将文件复制到此处并继续。其他服务在该副本文件夹中查找文件的名称(或其他标识符)。因为它已经存在,所以将无法继续。
可以产生许多其他变体,但是基本思想是标记该文件路径,以便它已被处理或在进行中。
请注意,如果无法完成对文件的处理,则必须回滚。根据您选择的选项,您需要删除列表中的记录,或者将文件移回原始目录,或者删除该文件的副本。