我想在春季批量阅读多个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
......
或任何其他方式??????
答案 0 :(得分:1)
您可以采取三种方法。每个人都有它的好处和弱点。
使用步骤验证
您可以使用validateFileName
步骤设置作业,该步骤位于处理文件的步骤之前(例如processFiles
)。 validateFileName
步骤将对所需的文件名进行任何验证,然后提供要处理到下一步的文件。如何通信这可能很简单,例如将有效文件移动到新目录,或者像使用作业ExecutionContext
来存储要处理的文件名一样复杂。
这样做的好处是它可以将验证与处理分离。缺点是,如果你有额外的步骤,它会使工作稍微复杂一些。
使用StepExecutionListener进行验证
您可以使用StepExecutionListener#beforeStep()
调用来进行验证。关于如何传达验证和不验证的内容,相同的概念与以前一样适用。
这可能是一个不太复杂的选项,但它更紧密地耦合(尽管略有)处理和验证。
使用在读取之前验证的ItemReader
最后一个选项是编写一个类似于ItemReader
的{{1}}实现,但在读取之前提供了验证文件的钩子。如果文件未验证,则跳过它。
此选项再次将验证与处理相结合,但可能为此特定用例提供了一个很好的可重用抽象。
我希望这有帮助!