如果文件中的项目数量非常少,SpringBatch多线程步骤是否可以安全使用?

如果文件中的项目数量非常少,SpringBatch多线程步骤是否可以安全使用?,spring,spring-batch,Spring,Spring Batch,我在文档中读到,使用多线程步骤是不安全的,因为许多ItemReader和Writer都不是线程安全的 我使用FlatFileItemReader来读取和处理项目 对于需要处理大量项目的文件,我使用远程分区 但有些步骤的输入文件只有2-3项(它们只是市场ID,例如eu、gb等)。我将再增加几个市场。我需要运行一些将这些市场ID作为输入的命令。我想并行运行所有这些命令 即使我使用FlatFileItemReader,多线程步骤也可以安全地用于这种用例吗?或者我应该选择远程分区(没有多少数据需要分区)

我在文档中读到,使用多线程步骤是不安全的,因为许多ItemReader和Writer都不是线程安全的


我使用FlatFileItemReader来读取和处理项目

对于需要处理大量项目的文件,我使用远程分区

但有些步骤的输入文件只有2-3项(它们只是市场ID,例如eu、gb等)。我将再增加几个市场。我需要运行一些将这些市场ID作为输入的命令。我想并行运行所有这些命令


即使我使用FlatFileItemReader,多线程步骤也可以安全地用于这种用例吗?或者我应该选择远程分区(没有多少数据需要分区)


另外,如果我使用多线程步骤,它会正常运行吗?我使用不同的参数启动同一作业的多个实例,例如不同的日期?

FlatFileItemReader不是线程安全的,因为它的状态基于已读取文件中的行数。当在多个线程中使用它时,该数字会被覆盖,因此无法知道在重新启动时已读取和未读取的内容。如果可重启性不是一个问题(如果作业失败,您可以从头开始),那么您可以在
FlatFileItemReader

中一步使用多个线程。我们可以使用ListItemReader,因为我们可以轻松地为有限的项目创建列表吗?ListItemReader是线程安全的,并且可以重新启动吗?还有一件事,我在远程分区中使用多线程FlatFileItemReader。我在每台服务器上运行6个分区步骤。使用此方法或将文件拆分为与网格大小相等的文件数,哪种方法更好?我不认为这是core spring批处理的一部分,但它在这里可用。ListItemReader不是阶段性的,因此不可重新启动。我不熟悉多线程FlatFileItemReader(它不是Spring批处理ItemReader实现),所以我不知道该怎么说。我建议只使用带有远程分区的常规FlatFileItemReader。由于每个分区都是单线程的,所以可以重新启动。我使用的是上面问题中提到的FlatFileItemReader,文件有3个项目,每个项目需要15分钟的处理时间。如果两个项目处理成功,第三个项目失败,并且如果我重新启动,则该步骤不会处理第三个项目,而只是将步骤标记为已完成。理想情况下,它应该处理第三项。我很好,如果它处理所有项目,如果任何一个失败。是否有任何方法可以确保它在任何失败时都能处理?作业存储库是如何配置的?您是否已将保存状态配置为false(这对您的用例不好)?我需要查看您的配置以提供更多帮助。