Spring batch 为每个文件启动spring批处理作业

Spring batch 为每个文件启动spring批处理作业,spring-batch,Spring Batch,我们在一夜之间处理了很多文件(大约500个),这些文件每隔几分钟就会出现一次。但当它们出现时,它们是30-50个一组的。为每个文件启动作业或将其分组并使用多线程步骤进行处理是一个好主意吗?看起来文件的处理顺序并不重要 我将使用每个文件的批处理作业实例,而不是多线程步骤。使用单独作业实例的一些优点如下 多线程步骤更容易实现 一个文件中的错误不会影响其他文件的处理 如果您的文件非常大,您可以实现多线程步骤来并行处理一个文件的记录。只有当业绩不符合预期时,我才会考虑。 多线程编程通常很难实现。Spri

我们在一夜之间处理了很多文件(大约500个),这些文件每隔几分钟就会出现一次。但当它们出现时,它们是30-50个一组的。为每个文件启动作业或将其分组并使用多线程步骤进行处理是一个好主意吗?

看起来文件的处理顺序并不重要

我将使用每个文件的批处理作业实例,而不是多线程步骤。使用单独作业实例的一些优点如下

  • 多线程步骤更容易实现

  • 一个文件中的错误不会影响其他文件的处理

  • 如果您的文件非常大,您可以实现多线程步骤来并行处理一个文件的记录。只有当业绩不符合预期时,我才会考虑。


  • 多线程编程通常很难实现。SpringBatch在抽象并行处理的复杂性方面做得很好,但我发现通常有细微差别需要处理,因此如果可以,最好避免多线程步骤

    我建议使用分区,而不是直接执行多线程或每个文件执行作业。使用
    MultiResourcePartitioner
    ,您可以为每个文件创建一个分区,这意味着每个文件都有自己的步骤。通过这样做,您可以避免一些线程复杂性(step scope stateful components),并且仍然可以在“批处理”(作业的运行)中维护可重启性和每个文件的独立执行。您可以在以下文档中阅读有关分区的更多信息: