保留有关失败 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
。但是,似乎没有这样的信息(尤其是对于分块步骤)。
如果我需要以下方面的信息,什么是好的方法:
- Job执行时发生了哪些Exception
- 哪个项目触发了它
JobExecution
提供了一种方法 get all failure exceptions 在工作期间发生。您可以在 JobExecutionListener#afterJob(JobExecution jobExecution)
中使用它来生成报告。
关于哪些项目导致了问题,这将取决于异常发生的位置(在读取、处理或写入操作期间)。对于此要求,您可以使用 ItemReadListener
、ItemProcessListener
或 ItemWriteListener
之一来记录这些项目(例如,通过将它们添加到作业执行上下文中以便能够在报告的 JobExecutionListener#afterJob
方法中访问它们。
我有一个运行 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
。但是,似乎没有这样的信息(尤其是对于分块步骤)。
如果我需要以下方面的信息,什么是好的方法:
- Job执行时发生了哪些Exception
- 哪个项目触发了它
JobExecution
提供了一种方法 get all failure exceptions 在工作期间发生。您可以在 JobExecutionListener#afterJob(JobExecution jobExecution)
中使用它来生成报告。
关于哪些项目导致了问题,这将取决于异常发生的位置(在读取、处理或写入操作期间)。对于此要求,您可以使用 ItemReadListener
、ItemProcessListener
或 ItemWriteListener
之一来记录这些项目(例如,通过将它们添加到作业执行上下文中以便能够在报告的 JobExecutionListener#afterJob
方法中访问它们。