The*_*rXP 5 java csv spring spring-batch
我正在处理许多没有固定标题/列的 CSV 文件,说我可以获得带有 10 列的 file1.csv 和带有 50 列的 file2.csv。
我无法提前知道我将拥有的列数,我无法为每种文件类型创建特定的作业,我的输入将是一个黑匣子:一堆 CSV,其中将有 X 个列数10 到无限。
由于我想使用 Spring Batch 自动导入这些 CSV,我想知道是否可以?我知道我必须获得固定数量的列,因为处理器以及在将数据发送回作者之前需要将数据序列化为 POJO 的事实。
我的处理器可以序列化一个数组吗?除了发送一个简单的对象,我还能得到一个对象数组吗?在我的工作结束时,我会得到一个对象数组的数组吗?
你怎么认为?
谢谢
我带着同样的问题来到这个旧帖子。最后,我在 的帮助下成功构建了一个动态列 FlatFileItemReader,skippedLinesCallback所以我将其留在这里:
@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();
}
Run Code Online (Sandbox Code Playgroud)
在回调方法中,您可以从标题行更新分词器的名称。您还可以在此处添加一些验证逻辑。使用此解决方案,无需编写自己的 LineTokenizer 实现。
创建您自己的LineTokenizer实现。需要DelimitedLineTokenizer预定义的列数。如果您创建自己的,您可以随心所欲地充满活力。您可以LineTokenizer在此处的文档中阅读有关以下内容的更多信息:http://docs.spring.io/spring-batch/apidocs/org/springframework/batch/item/file/transform/LineTokenizer.html
| 归档时间: |
|
| 查看次数: |
3111 次 |
| 最近记录: |