当资源不可用于调用其他步骤并重试引发异常的同一步骤时,如何处理FlatFileItemReader异常?

时间:2014-06-18 08:40:38

标签: spring spring-batch spring-batch-admin

我正在使用spring批量远程分区。我的第一步是为所有其他步骤准备输入文件。其他步骤处理输入文件。

要在所有4台服务器上创建输入文件,我的第一步应该在所有服务器上运行。所以我在所有服务器上设置了消费者并发1,网格大小4 =服务器数量。

但是某些服务器上的消费者多次使用步骤执行请求消息,因此在其他服务器上第一步不运行,因此输入文件没有准备好,导致尝试处理这些文件的其他步骤失败。

如果资源(输入文件)不可用,如果任何步骤抛出异常,我想运行第一步,然后重试抛出异常的同一步骤。

如果资源不可用,如何处理FlatFileItemReader在严格模式下抛出的异常,并调用第一步准备输入文件并重试引发异常的同一步骤?

更多详情为here

documentation中,提到了两种类型的例外

  

出于这个原因,Spring Batch提供了处理解析异常的异常层次结构:FlatFileParseException和FlatFileFormatException。在尝试读取文件时遇到任何错误时,FlatFileItemReader会抛出FlatFileParseException。 LineTokenizer接口的实现抛出FlatFileFormatException,并指示在标记化时遇到更具体的错误。

是否意味着在读取现有文件时出现错误时会抛出FlatFileParseException,或者当文件根本不存在时抛出它会被抛出?

或源代码,

FlatFileItemReader<T> extends AbstractItemCountingItemStreamItemReader其中AbstractItemCountingItemStreamItemReader:read抛出UnexpectedInputException

我不确定如何使用它们?

1 个答案:

答案 0 :(得分:1)

对于此类问题,如果在其他情况下不存在步骤B的文件,请使用JobExecutionDecider将作业流程重定向到步骤A. 这个解决方案更加清晰,可以显示您的工作的实际流程,而无需隐藏在异常管理之后(例如,如果SB mantainer决定更改FlatFileReader异常层次结构,那该怎么办?)