【问题标题】:read and validate in spring batch在春季批处理中读取和验证
【发布时间】:2017-08-16 13:17:31
【问题描述】:

我想在 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
......

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

【问题讨论】:

  • 您是只处理验证的文件,还是任何验证错误都会停止处理其余文件?
  • 只处理验证过的文件

标签: spring file spring-batch


【解决方案1】:

您可以采用三种方法。每个都有它的优点和缺点。

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

这样做的好处是它将验证与处理分离。缺点是它会使工作稍微复杂一些,因为您需要额外的步骤。

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

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

使用ItemReader在读取之前进行验证
最后一个选项是编写一个类似于MultiResourceItemReaderItemReader 实现,但提供了一个挂钩来在读取文件之前验证文件。如果文件未通过验证,您将跳过它。

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

我希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 2017-10-06
    • 2020-08-10
    • 2014-12-15
    • 2018-05-27
    • 2015-05-13
    • 2017-06-25
    相关资源
    最近更新 更多