【问题标题】:Spring Batch exception HandlingSpring Batch 异常处理
【发布时间】:2016-09-02 19:37:35
【问题描述】:

我目前是第一次使用 Spring Batch。在春季批次中,我将提交级别设置为 1000,这给了我更好的性能,但现在我在识别损坏或异常项目方面遇到了问题。我们需要发送带有异常数据的记录行或项目编号的邮件更新。

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

提前致谢

【问题讨论】:

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


    【解决方案1】:

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

    编辑: 要找到提交范围,您需要保留顺序。如果使用FlatFileItemReader,如果您的 POJO 实现了ItemCountAware,它将为您存储该行。如果针对数据库运行,您需要确保查询保留唯一索引上的 order by。然后,您将能够通过检查 read_count 来自 batch_step_execution 表的位置来跟踪块。

    【讨论】:

    • 感谢您的回复。我将因第一次发生的问题本身而失败,但在百万记录文件中,例如,如果第 1000 次提交失败,我可以理解它的 999*1000 +? (我需要这个号码)
    • 此外,如果需要,我还需要将完整信息发送给支持团队,以便在重启前进行手动更正。转身应该尽快
    • 谢谢。读取计数将是提交级别的整数,如果其为 100……读取计数将是 100 的倍数……问题可能在 59 项中。如何在作业执行侦听器中获取这 59 个数字(如果可能的数据)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-06-16
      • 1970-01-01
      • 2020-02-24
      • 2019-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-17
      • 2023-03-28
      相关资源
      最近更新 更多