我正在使用spring批量远程分区。我的第一步是为所有其他步骤准备输入文件。其他步骤处理输入文件。
要在所有4台服务器上创建输入文件,我的第一步应该在所有服务器上运行。所以我在所有服务器上设置了消费者并发1,网格大小4 =服务器数量。
但是某些服务器上的消费者多次使用步骤执行请求消息,因此在其他服务器上第一步不运行,因此输入文件没有准备好,导致尝试处理这些文件的其他步骤失败。
如果资源(输入文件)不可用,如果任何步骤抛出异常,我想运行第一步,然后重试抛出异常的同一步骤。
如果资源不可用,如何处理FlatFileItemReader在严格模式下抛出的异常,并调用第一步准备输入文件并重试引发异常的同一步骤?
更多详情为here
在documentation中,提到了两种类型的例外
出于这个原因,Spring Batch提供了处理解析异常的异常层次结构:FlatFileParseException和FlatFileFormatException。在尝试读取文件时遇到任何错误时,FlatFileItemReader会抛出FlatFileParseException。 LineTokenizer接口的实现抛出FlatFileFormatException,并指示在标记化时遇到更具体的错误。
是否意味着在读取现有文件时出现错误时会抛出FlatFileParseException
,或者当文件根本不存在时抛出它会被抛出?
或源代码,
FlatFileItemReader<T> extends AbstractItemCountingItemStreamItemReader
其中AbstractItemCountingItemStreamItemReader:read
抛出UnexpectedInputException
?
我不确定如何使用它们?
答案 0 :(得分:1)
对于此类问题,如果在其他情况下不存在步骤B的文件,请使用JobExecutionDecider
将作业流程重定向到步骤A.
这个解决方案更加清晰,可以显示您的工作的实际流程,而无需隐藏在异常管理之后(例如,如果SB mantainer决定更改FlatFileReader异常层次结构,那该怎么办?)