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

时间:2017-05-15 15:00:34

标签: spring-batch

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

  

当项目阅读器抛出可跳过的异常时,Spring Batch就是   在项目阅读器上再次调用read方法以获取下一个项目。   交易没有回滚。当物品处理器抛出时   一个可跳过的异常,Spring Batch回滚了该事务   当前块并将读取的项重新提交到项目处理器,   除了触发可跳过异常的那个   以前的运行。图8.3显示了Spring Batch在项目时的功能   作家抛出一个可跳过的例外。因为框架没有   知道哪个项目抛出了异常,它重新处理了每个项目   在自己的交易中一个接一个的块。

我想知道上面描述的过程的官方Spring Batch术语是什么,项目编写者抛出可跳过的异常并且逐个重新提交块

我的项目编写者发送电子邮件,我想确保这种重新提交和重新处理块项目的过程在任何情况下都不会发生任何异常(这会重新发送已经发送的块中的电子邮件,这将是一个问题) 。 如何确保不会重新提交项目(或其任何名称)?

1 个答案:

答案 0 :(得分:0)

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

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

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