gpt4 book ai didi

java - Spring Batch - 是否可以在 FlatFileReader 中有一个动态列?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:36:50 24 4
gpt4 key购买 nike

我正在处理许多没有固定标题/列的 CSV 文件,我说我可以获得 10 列的 file1.csv 和 50 列的 file2.csv。

我无法预先知道我将拥有的列数,我无法为每种文件类型创建特定的作业,我的输入将是一个黑框:一堆 CSV 将具有 X 编号从 10 到无穷大的列数。

因为我想使用 Spring Batch 来自动导入这些 CSV,我想知道是否可以?我知道由于处理器的原因我必须获得固定数量的列,而且我需要在将数据发送回编写器之前将其序列化为 POJO。

我的处理器可以序列化一个数组吗?除了发送一个简单的对象之外,我能否得到一个对象数组,并且在我的工作结束时我将得到一个对象数组的数组?

你怎么看?

谢谢

最佳答案

我带着同样的问题来到这个旧帖子。最后,在 skippedLinesCallback 的帮助下,我设法构建了一个动态列 FlatFileItemReader,所以我把它留在这里:

@Bean
public FlatFileItemReader<Person> reader() {

DefaultLineMapper<Person> lineMapper = new DefaultLineMapper<>();
DelimitedLineTokenizer delimitedLineTokenizer = new DelimitedLineTokenizer();
lineMapper.setLineTokenizer(delimitedLineTokenizer);
lineMapper.setFieldSetMapper(new BeanWrapperFieldSetMapper<>() {
{
setTargetType(Person.class);
}
});

return new FlatFileItemReaderBuilder<Person>()
.name("personItemReader")
.resource(new FileSystemResource(inputFile))
.linesToSkip(1)
.skippedLinesCallback(line -> delimitedLineTokenizer.setNames(line.split(",")))
.lineMapper(lineMapper)
.build();
}

在回调方法中,您从标题行更新分词器的名称。您还可以在此处添加一些验证逻辑。使用此解决方案,无需编写您自己的 LineTokenizer 实现。

关于java - Spring Batch - 是否可以在 FlatFileReader 中有一个动态列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40873311/

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