【问题标题】:Spring Batch - FlatFileItemWriter write to a file, close it, write to new fileSpring Batch - FlatFileItemWriter 写入文件,关闭它,写入新文件
【发布时间】:2017-04-07 15:50:49
【问题描述】:

所以我有一个自定义类,它扩展了我用来编写 CSV 文件的 FlatFileItemWriter。基于某些条件,我想完成我的第一个文件,然后写入一个新文件。有没有办法用 FlatFileItemWriter 做到这一点?

这是我的代码示例:

@Override
public void write(List<? extends MyObject> items) throws Exception {
    ExecutionContext stepContext = this.stepExecution.getExecutionContext();
    int currentFileIncrememnt = (int) stepContext.get("currentFileIncrement");
    if(currentFileIncrement== fileIncrement) {
        super.write(items);
    }
    else {
        super.close();
        fileIncrement = currentFileIncrement;
        super.setHeaderCallback(determineHeaderCallback());
        super.setResource(new FileSystemResource("src/main/resources/" + fileIncrement+ ".csv"));
        super.setShouldDeleteIfExists(true);
        DelimitedLineAggregator<MyObject> delLineAgg = new DelimitedLineAggregator<>();
        delLineAgg.setDelimiter(",");
        BeanWrapperFieldExtractor<MyObject> fieldExtractor = new BeanWrapperFieldExtractor<>();
        fieldExtractor.setNames(new String[] {"id", "amount"});
        delLineAgg.setFieldExtractor(fieldExtractor);
        super.setLineAggregator(delLineAgg);
        super.write(items);
    }
}

【问题讨论】:

标签: java spring-batch


【解决方案1】:

我不明白您使用的是自定义编写器还是弹簧编写器。如果您使用自定义(可能是从 spring one 扩展),您可以通过处理器、读取器或映射器传递参数来使用您想要的任何内容。如果你想使用 Spring writer,你应该做一些独立的步骤。 提供更多细节。

【讨论】:

  • 我的错,是的,我正在扩展 FlatFileItemWriter。我会补充一些细节
  • 我认为您尝试了该代码中的解决方案。它有效吗?发布异常或行为。无论如何,我认为拥有不同的批处理步骤并使用相同的编写器是一个更好的主意。如果您决定这样做,则必须将控制代码放入阅读器或处理器中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
  • 2023-01-22
  • 1970-01-01
  • 2014-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多