我有一个包含10个项目的文件,并且提交间隔被设置为10.我正在过滤项目处理器中的项目以获取验证错误。
说...如果1或2项未通过验证并在项目处理器中过滤,则项目编写器将接收剩余的8个项目并进行处理。
如果甚至单个项目在项目处理器中被过滤,有没有办法过滤所有未被发送到Item Writer的项目?
由于
答案 0 :(得分:0)
在读取,处理或写入期间抛出Exception
时的默认Spring Batch行为是FAIL
即时整个步骤。
也就是说,您只需在流程方法中抛出Exception
即可防止将commit-interval
中的所有项目发送给作者。
@Override
public O process(I item) {
if (condition) {
throw new Exception("Item failed validation");
}
}
现在,正如我所说,你的步骤将FAIL
,这可能不是你想要的行为。为了防止这种情况,您可以举例说明自定义Exception
类并使用它而不是基本Exception
。然后,您可以在块上配置skip logic
,让步骤完成处理其他项目:
<batch:chunk commit-interval="10" skip-limit="1000000000">
<batch:skippable-exception-classes>
<batch:include class="xx.xx.xx.CustomException" />
</batch:skippable-exception-classes>
</batch:chunk>
现在,如果您希望步骤完成,但不处理剩余的项目,您可以在抛出Exception
之前设置一个标志,并在处理过程中进行检查。如果设置为true,则返回null(跳过所述项),如果处理不正常。