Spring 批量处理两个不同结构的文件

Spring Batch Two Files With Different Structure

我在 spring 批处理中有一个项目,我必须从两个 .txt 文件中读取,一个有很多行,另一个是控制文件,其中包含应从第一个文件读取的行数文件。我知道我必须使用分区来处理这些文件,因为第一个文件非常大,我需要将其划分并能够在它失败时重新启动它,但我不知道 reader 应该如何处理这些文件文件,因为这两个文件的行宽不同。 None 个文件的行中有 header 或分隔符,所以我必须根据范围主要在第一个中获取字段。

我的疑问之一是我是否应该在同一个 reader 中阅读两者?在使用相同 reader 的情况下,我应该如何设置 reader FixedLengthTokenizer 和 DefaultLineMapper 来处理这两个文件??

这些是输入文件和控制文件的例子

- 输入文件

09459915032508501149343120020562580292792085100204001530012282921883101

txt 文件最多可包含 50000 行

- 控制文件

00128*

它只有一根线

谢谢!

I must read from two .txt files, one has many lines and the other is a control file that has the number of lines that should be read from the first file

以下是解决您的用例的可能方法:

  • 创建一个读取控制文件的第一步(tasklet),并将要读取的行数放在作业执行上下文中(与下一步共享)
  • 创建第二个步骤(面向块),步骤范围为 reader,配置为仅读取第一步计算的行数(从作业执行上下文中获取值)

您可以在此处阅读有关在步骤之间共享数据的更多信息:https://docs.spring.io/spring-batch/docs/4.2.x/reference/html/common-patterns.html#passingDataToFutureSteps