保留有关失败 Item 处理的详细信息

Persist detailed information about failed Item processing

我有一个运行 TaskletStep 的作业,然后是一个基于块的步骤,然后是另一个 TaskletStep。 在每个步骤中,都可能发生错误(以异常的形式)。

基于块的步骤如下所示:

stepBuilderFactory
            .get("step2")
            .chunk<SomeItem, SomeItem>(1)
            .reader(flatFileItemReader)
            .processor(itemProcessor)
            .writer {}
            .faultTolerant()
            .skipPolicy { _ , _ -> true } // skip all Exceptions and continue
            .taskExecutor(taskExecutor)
            .throttleLimit(taskExecutor.corePoolSize)
            .build()

整个作业定义:

jobBuilderFactory.get("job1")
            .validator(validator())
            .preventRestart()
            .start(taskletStep1)
            .next(step2)
            .next(taskletStep2)
            .build()

我预计 Spring Batch 会以某种方式拾取过程中发生的异常,因此我可以在作业完成处理后创建包含它们的报告。查看不同的上下文,还有一些字段应包含 failureExceptions。但是,似乎没有这样的信息(尤其是对于分块步骤)。

如果我需要以下方面的信息,什么是好的方法:

JobExecution 提供了一种方法 get all failure exceptions 在工作期间发生。您可以在 JobExecutionListener#afterJob(JobExecution jobExecution) 中使用它来生成报告。

关于哪些项目导致了问题,这将取决于异常发生的位置(在读取、处理或写入操作期间)。对于此要求,您可以使用 ItemReadListenerItemProcessListenerItemWriteListener 之一来记录这些项目(例如,通过将它们添加到作业执行上下文中以便能够在报告的 JobExecutionListener#afterJob 方法中访问它们。