在春季批次中阅读和验证

时间:2017-08-16 13:17:31

标签: spring file spring-batch

我想在春季批量阅读多个xml文件,在阅读之前我应该​​验证每个文件的名称并将其放在上下文中,我该如何处理? 是否有可能使用tasklet和读写器处理器这个senario? :

folder : file1.xml file2.xml file3.xml
validate filename (file1.xml) -- read file1 -- process -- write
then
validate filename (file2.xml) -- read file2 -- write
validate filename (file3.xml) -- read file3 -- write
......

或任何其他方式??????

1 个答案:

答案 0 :(得分:1)

您可以采取三种方法。每个人都有它的好处和弱点。

使用步骤验证
您可以使用validateFileName步骤设置作业,该步骤位于处理文件的步骤之前(例如processFiles)。 validateFileName步骤将对所需的文件名进行任何验证,然后提供要处理到下一步的文件。如何通信这可能很简单,例如将有效文件移动到新目录,或者像使用作业ExecutionContext来存储要处理的文件名一样复杂。

这样做的好处是它可以将验证与处理分离。缺点是,如果你有额外的步骤,它会使工作稍微复杂一些。

使用StepExecutionListener进行验证
您可以使用StepExecutionListener#beforeStep()调用来进行验证。关于如何传达验证和不验证的内容,相同的概念与以前一样适用。

这可能是一个不太复杂的选项,但它更紧​​密地耦合(尽管略有)处理和验证。

使用在读取之前验证的ItemReader
最后一个选项是编写一个类似于ItemReader的{​​{1}}实现,但在读取之前提供了验证文件的钩子。如果文件未验证,则跳过它。

此选项再次将验证与处理相结合,但可能为此特定用例提供了一个很好的可重用抽象。

我希望这有帮助!