【问题标题】:Spring batch : processing list of filesSpring批处理:处理文件列表
【发布时间】:2015-04-15 21:46:33
【问题描述】:

春季批处理:我有一个文件列表,我需要处理这些文件并将其拆分为不同的文件并写入。我按照中提到的步骤 http://incomplete-code.blogspot.com/2013/07/spring-batch-looping-over-multiple-files.html#comment-form

在此我们使用动态向 FlatFileItemWriter 提供资源属性 . 第一步工作正常。但是,从下一次迭代开始,它不再使用“input.file”的新值,而是继续使用相同的文件(在第一次迭代中使用)。任何人都可以建议我是否可以在每次迭代中都有一个可以获取文件的新动态值的写入器?

【问题讨论】:

  • 您必须发布您的代码及其生成的任何错误消息。
  • 首先您必须发布您的工作和错误详细信息以由其他开发人员解决。您可以通过使用 org.springframework.batch.item.file.MultiResourceItemReader 从多个文件中读取来做到这一点。跨度>
  • 实际上代码与上面发布的链接相同。在这段代码中,正在执行以下操作:

标签: java spring spring-batch


【解决方案1】:

我已经解决了这个问题:

这是对问题的正确描述:

实际上代码类似于上面发布的链接中的代码。 然后唯一的区别是我将“input.file”传递给 FlatFileOutputWriter 而不是 FlatFileItemWriter。

在此代码中,正在执行以下操作:

  1. 我们将作业参数“input.files”作为文件名的逗号分隔列表传递。
  2. 在 FileDecision 类中,我们检索“input.files”参数,将其拆分 进入字符串列表并对其进行迭代。在每次迭代中,我们放置一个新参数 jobExecutionContext 中的“input.file”。
  3. 在spring bean声明文件(xml文件)中,我们传入this的值 “input.file”(在 jobExecutionContext 中)到 FlatFileItemWriter(作为 资源属性)。
  4. 然后我们将此 FlatFileItemReader 传递给作业步骤(multipleFileProcess.step1) 正在迭代。我们期望在每次迭代中,我们设置一个新值 对于“input.file”(文件末尾没有“s”),我们将能够编写 内容到新的输出文件。

    但是,不是在单独的输出中写入 文件,它将所有迭代的内容写入单个输出 文件(在第一次迭代中设置为 FlatFileItemWriter 的输出文件)

    我实施的解决方案:

    1. 创建了一个 CustomItemWriter 并将其注入到作业步骤 (multipleFileProcess.step1) 正在迭代。
    2. 将 MultiResourceItemWriter 注入到 CustomItemWriter。
    3. 将 FlatFileItemWrited 注入到 MultiResourceItemWriter 中,资源值=""。
    4. 在 CustomItemWriter @BeforeStep 方法中, 一个。使用从“input.file”(在 jobExecutionContext 中)检索的文件值创建了一个新资源。 湾。将此新资源设置为 MultiResourceItemWriter 实例变量。

现在,我可以在每次迭代中写入单独的输出文件。 我也会在周末之后发布示例代码。

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 2014-12-03
    相关资源
    最近更新 更多