Spring Batch异常处理

时间:2016-09-02 19:37:35

标签: spring spring-batch spring-batch-admin

我目前第一次使用弹簧批次。在Spring批处理中,我将提交级别设置为1000,这给了我更好的性能,但现在我确定了识别损坏或异常项的问题。我们需要发送包含记录行或项目编号的邮件更新以及异常数据。

我尝试了项侦听器,块侦听器,步骤侦听器和作业侦听器,但在作业侦听器中生成邮件时,无法弄清楚如何从执行侦听器上下文中获取这些信息。能够获取有关异常的信息,并且无法跟踪哪个记录在块中存在问题和项目计数。 例如,如果我在文件或数据库中有1000行,并且提交级别为100.如果我们在165项中有问题。我需要在任何监听器中获取165的行号,这样我就可以在上下文中附加它以填充日志信息,以便在重新处理之前快速转换时间来解决问题。 我搜索但我无法得到建议或想法。我相信这将是大于1的块提交中的常见问题。请建议更好的方法来处理。

提前致谢

2 个答案:

答案 0 :(得分:0)

您希望执行可能导致处理器出现问题的检查,并从中创建一个错误项,该错误项将持久保存到其自己的表/文件中。有些错误是不可避免的,不幸的是,您需要在该块中进行手动调试。

编辑: 要查找提交范围,您需要保留顺序。如果您使用],则会在您的POJO实施FlatFileItemReader时为您存储该行。如果针对数据库运行,您将要确保查询在唯一索引上按顺序保留顺序。然后,您可以通过查看ItemCountAware表中read_count的位置来跟踪该块。

答案 1 :(得分:0)

您可以启用skipping。在由于可跳过的异常而导致块失败后,Spring Batch会在单独的事务中再次处理块的每个项目。它以这种方式检测导致异常的项目。