首页 文章

如何防止Spring Batch在项目编写者抛出可跳过的异常时重新提交块项目?

提问于
浏览
0

我参考了Manning出版商的Spring Batch书 . 引用书中的一段:

当项目阅读器抛出可跳过的异常时,Spring Batch只在项目阅读器上再次调用read方法以获取下一个项目 . 交易没有回滚 . 当项目处理器抛出可跳过的异常时,Spring Batch回滚当前块的事务并将读取的项重新提交到项目处理器,但在上一次运行中触发可跳过异常的项除外 . 图8.3显示了当项目编写器抛出可跳过的异常时Spring Batch的作用 . 因为框架不知道哪个项目抛出了异常,所以它在自己的事务中逐个地重新处理块中的每个项目 .

我想知道上面描述的过程的 official Spring Batch terminology 是什么,一个项目编写者抛出一个可跳过的异常 and the chunk is resubmitted one by one

我的项目编写者发送电子邮件,我想确保这种重新提交和重新处理块项目的过程在任何情况下都不会发生任何异常(这将重新发送已经发送的块中的电子邮件,这将是一个问题) . How can I ensure that resubmission of the items (or whatever it is called) does not occur?

1 回答

  • 0

    最好的方法是首先不要抛出可跳过的异常 . 如果由于预期的业务/验证规则而明确创建它是一个例外,我建议改为利用从处理器返回 null 的"filter"模式 . 或者,您可以使用 Classifier 处理器/写入器来处理与有效记录不同的无效记录 .

    如果抛出异常是不可避免的,我建议你使用try / catch并在 ItemProcessor 中处理它并在那里处理它 .

    至于遇到可跳过异常时框架的作用概述,check out this older answer .

相关问题