Spring批处理:处理文件列表

时间:2015-04-15 21:46:33

标签: java spring spring-batch

Spring批处理:我有一个文件列表,我需要处理并拆分成不同的文件并写入。我按照中提到的步骤进行操作 http://incomplete-code.blogspot.com/2013/07/spring-batch-looping-over-multiple-files.html#comment-form

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

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题:

以下是对问题的正确描述:

实际上代码与上面发布的链接中的代码类似。 然后唯一的区别是我将“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'),我们就可以编写了 内容到新的输出文件。

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

    我实施的解决方案:

    1. 创建一个CustomItemWriter并将其注入作业步骤(multipleFileProcess.step1) 正在迭代。
    2. 将MultiResourceItemWriter注入CustomItemWriter。
    3. 使用资源值=“”将FlatFileItemWrited注入​​MultiResourceItemWriter。
    4. 在CustomItemWriter @BeforeStep方法中, 一个。创建了一个新的资源,其文件值从“input.file”(在jobExecutionContext中)中检索。 湾将此新资源设置为MultiResourceItemWriter实例变量。
  5. 现在,我可以在每次迭代中写入单独的输出文件。 我也会在周末之后发布示例代码。

    由于