我们隔夜处理大量文件(大约500个),这些文件每隔几分钟就会出现一次。但是当他们来的时候,它是30-50组。为每个文件启动作业或将它们分组并使用多线程步骤处理它是一个好主意吗?
答案 0 :(得分:1)
我建议不要直接使用多线程或每个文件作业,而是建议使用分区。使用MultiResourcePartitioner
,您可以为每个文件创建一个分区,这意味着每个文件都是自己的步骤。通过这样做,您可以避免一些线程复杂性(步骤范围有状态组件),并且仍然可以在“批处理”(运行作业)中维护诸如可重启性和每个文件的独立执行之类的事情。您可以在此处的文档中阅读有关分区的更多信息:http://docs.spring.io/spring-batch/trunk/reference/html/scalability.html
答案 1 :(得分:0)
看起来处理文件的顺序无关紧要。
我会在每个文件中使用批处理作业的实例而不是多线程步骤。使用单独作业实例的一些优点是
实现多线程步骤更容易。
一个文件中的错误不会影响其他文件的处理。
如果您的文件非常大,您可以实现多线程步骤来并行处理一个文件的记录。只有表现不符合预期时,我才会考虑这一点。
一般来说,多线程编程很难。 Spring批处理很好地抽象了并行处理的复杂性,但我发现通常有细微差别需要处理,所以如果可以的话,最好避免使用多线程步骤。