gpt4 book ai didi

java - 如何在 spring 批处理作业中更改 ItemWriter 目标文件名?

转载 作者:行者123 更新时间:2023-12-02 02:51:34 24 4
gpt4 key购买 nike

我有一个 MultiResourceItemReader,可以从文件夹加载多个 csv 文件。

对于每个文件,我想更改 ItemWriter 生成的文件名。但是:怎么办?

@Bean
public MultiResourceItemReader<String> reader() {
FlatFileItemReader<String> delegate = new FlatFileItemReader<>();

MultiResourceItemReader<String> r = new MultiResourceItemReader<>();
r.setResources(new PathMatchingResourcePatternResolver().getResources("*.csv"));
r.setDelegate(delegate);
return r;
}

@Bean
public FlatFileItemWriter<String> writer() {
FlatFileItemWriter<String> w = new FlatFileItemWriter<>();
w.setResource(new FileSystemResource("dynamicfile.txt); //how dynamically, eg depending on the input filename?
w.setLineAggregator(new PassThroughLineAggregator<>());
return w;
}

有可能吗?如果没有,我如何使用 ItemWriter 将数据写入不同的文件?

最佳答案

由于有关缓冲等的详细信息,您无法更改 FlatFileItemReader 实例的文件名。但是,您可以使用两种方法来完成相同的操作。

ClassifierCompositeItemWriter
使用 ClassifierCompositeItemWriter,您可以为每个要写入的文件创建一个 FlatFileItemWriter。然后,您将创建一个Classifier 实现,根据输入项选择阅读器。 ClassifierCompositeItemWriter 将使用您提供的Classifier 来选择为每个项目使用哪个编写器。

您可以在此处的文档中阅读有关 ClassifierCompositeItemWriter 的更多信息:http://docs.spring.io/spring-batch/apidocs/org/springframework/batch/item/support/ClassifierCompositeItemWriter.html

按资源分区
如果满足以下条件,您可以使用分区来处理同样的事情:

  1. 多个输入文件
  2. 多个输出文件
  3. 输入文件可以并行处理

在这种情况下,实现类似于 MultiResourcePartitionerPartitioner,您可以独立处理每个文件(与 MultiResourcePartitioner 的逻辑相同) ,只是还添加了输出文件信息的属性)。通过步级范围的读取器和写入器,可以动态配置输入源和输出目的地。

您可以在此处阅读有关分区的更多信息:http://docs.spring.io/spring-batch/reference/html/scalability.html#partitioning

关于java - 如何在 spring 批处理作业中更改 ItemWriter 目标文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43765122/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com