Spring batch 如何防止SpringBatch在项目编写器引发可跳过异常的情况下重新提交区块项目?

Spring batch 如何防止SpringBatch在项目编写器引发可跳过异常的情况下重新提交区块项目?,spring-batch,Spring Batch,我指的是曼宁出版社出版的一本春季批图书。引用书中的一段话: 当一个条目读取器抛出一个可跳过的异常时,Spring批处理只是 在项目读取器上再次调用read方法以获取下一个项目。 事务没有回滚。当项目处理器抛出 一个可跳过的异常,Spring批处理回滚 当前区块并将读取的项目重新提交给项目处理器, 除了在中触发可跳过异常的异常 上一轮。图8.3显示了当项目 writer抛出一个可跳过的异常。因为框架没有 如果知道哪个项引发了异常,它将重新处理 在其自己的事务中逐个块 我想知道,对于上面描述的过程,

我指的是曼宁出版社出版的一本春季批图书。引用书中的一段话:

当一个条目读取器抛出一个可跳过的异常时,Spring批处理只是 在项目读取器上再次调用read方法以获取下一个项目。 事务没有回滚。当项目处理器抛出 一个可跳过的异常,Spring批处理回滚 当前区块并将读取的项目重新提交给项目处理器, 除了在中触发可跳过异常的异常 上一轮。图8.3显示了当项目 writer抛出一个可跳过的异常。因为框架没有 如果知道哪个项引发了异常,它将重新处理 在其自己的事务中逐个块

我想知道,对于上面描述的过程,官方Spring批处理术语是什么,其中项目编写器抛出一个可跳过的异常,然后逐个重新提交块


我的项目编写器发送电子邮件,我希望确保在任何情况下都不会出现任何异常(这将重新发送区块中已发送的电子邮件,这将是一个问题),逐个重新提交和重新处理区块项目的过程如何确保不会重新提交项目(或任何名称?

最好的方法是首先不要抛出可跳过的异常。如果这是由于预期的业务/验证规则而显式创建的异常,我建议使用“过滤器”模式,即仅从处理器返回
null
。或者,您可以使用
分类器
处理器/写入程序以不同于有效记录的方式处理无效记录

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


关于遇到可跳过的异常时框架所做的概述,.

谢谢Dean。
MailSendException
是不可避免的,我已经用try/catch处理了这个异常。我也没有
项目处理器
:只有
项目阅读器
&
项目编写器
。我担心上面提到的其他异常。如果您的工作单元真的是1,那么我会将您的提交间隔设置为1。如果你真的不打算做“批量”的工作,我可能也会考虑搬到一个不同的框架,比如Spring集成。