如何处理从项目读取器抛出的异常?

5

我希望能捕获item reader所抛出的异常(例如,读取器未打开、不正确的token异常等)并处理它。目前Spring Batch将这些异常作为致命错误抛出并退出步骤。

请告诉我是否有任何方法可以做到这一点?


2
阅读Spring Batch官方文档(http://docs.spring.io/spring-batch/reference/html/configureStep.html#configuringSkip)。 - Luca Basso Ricci
实现跳过策略或扩展始终跳过类。它作为异常处理程序。您可以执行所有操作,例如基于此写入文件。方法应跳过验证布尔值,true表示步骤将继续,否则步骤将停止。 - Swarit Agarwal
1个回答

7
我曾遇到同样的问题,我想捕获由FlatFileItemReader抛出的 org.springframework.batch.item.file.FlatFileParseException并执行一些自定义处理和日志记录。我进行了一些研究,几乎得出结论我可能必须编写一个自定义的读取器来代替我当前正在使用的默认读取器,直到我偶然发现Spring Batch文档中的一个宝藏部分:http://docs.spring.io/spring-batch/reference/html/configureStep.html#interceptingStepExecution
你可以编写一个ItemReadListener<T>接口的自定义实现,并覆盖onReadError(Exception ex)方法,然后在相应的步骤中注册这个监听器类。这样,当读取器在从文件中读取时遇到异常时,该方法将被调用。异常引用也将传递给方法,您可以根据需要进行日志记录等操作。 类似地,如果您的整个目的是跳过在读取时可能发生的此类异常,则可以尝试在XML中向块配置添加以下内容:
<skippable-exception-classes>
     <include class="org.springframework.batch.item.file.FlatFileParseException"/>
</skippable-exception-classes>

参考:http://docs.spring.io/spring-batch/reference/html/configureStep.html#configuringSkip

问题已解决!:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接