2015-04-06 64 views
1

我正在使用spring批处理模块读取具有多行记录的复杂文件。文件中的前三行将始终包含一个具有少量公共字段的标题。 这些常用字段将用于处理文件中后续记录。作业可以重新启动。 假设输入文件有10条记录(请注意记录数可能与行数不同,因为记录可以跨越多行)。 假设作业第一次运行,开始从第1行读取文件,并处理第5条记录,并在处理第6条记录时失败。 在第一次运行期间,由于作业还解析了标题部分(文件中的前3行),因此应用程序可以成功处理前5条记录。 现在当重新启动失败的作业时,它将从第6条记录开始,因此这次不会读取标题部分。由于应用程序需要包含在标题记录中的某些值 ,因此作业失败。我想知道可能的建议,以便重新启动的作业始终读取标题部分,然后从其停止的位置(上述情况中的第6条记录)开始 。始终读取弹簧批作业重新启动的前n行

在此先感谢。

回答

3

我猜,有问题的文件在运行之间不会改变?那么就没有必要重新阅读它,我的解决方案基于这样的假设

如果你使用一个步骤中,您可以

它应该工作的重新启动为好,因为Spring Batch的读取/从第一次运行保存的值,并会提供完整的执行上下文的后续运行

+0

谢谢迈克尔 – ivish

3

可以使2步的工作,其中:

第一步读取第3行的头信息,并把需要工作的来龙去脉(如果作业失败,因此将其保存在数据库以备将来执行)。如果此步骤失败,则会再次读取标题信息,如果它通过,您确定它始终在作业上下文中具有标题信息。

第二步可以使用相同的文件输入,但这次你可以告诉它跳过前3行并按原样读取其余的文件。通过这种方式,您将在该步骤中获得可重启性,并且每次作业失败时都会恢复其离开的位置。

相关问题