[英]Spring Batch FlatFileItemReader provide filename in future step
[英]Configuring openCSV instead of FlatFileItemReader in spring batch step
我正在尝试在 spring 批处理的 reader() 步骤中配置 openCSV,以将从 CSV 文件中读取的记录直接转换为 JAVA POJO。 但是我遇到了如何使用 openCSV 正确设置lineMapper
的问题。
正如此处链接的帖子中所建议的如何在 spring 批处理中将 flatFileItemReader 替换为 openCSV ,我正在尝试如下:
public Event reader() throws IOException {
FlatFileItemReader<Event> itemReader = new FlatFileItemReader<Event>();
itemReader.setLineMapper(lineMapper());
itemReader.setLinesToSkip(1);
itemReader.setResource(new FileSystemResource(inputFilePath));
return itemReader;
}
但我无法弄清楚如何配置 lineMapper:
public LineMapper<Event> lineMapper() throws IOException {
DefaultLineMapper<Event> lineMapper = new DefaultLineMapper<Event>();
DelimitedLineTokenizer lineTokenizer = new DelimitedLineTokenizer("\t");
BeanWrapperFieldSetMapper<Event> fieldSetMapper = new BeanWrapperFieldSetMapper<Event>();
fieldSetMapper.setTargetType(Event.class);
lineMapper.setLineTokenizer(???);
lineMapper.setFieldSetMapper(???);
我有读取文件并将其转换为所需的 POJO 的代码,但是将其放在哪里:
try (
Reader reader = Files.newBufferedReader(Paths.get(inputFilePath));
) {
CsvToBean<Event> csvToBean = new CsvToBeanBuilder(reader)
.withSkipLines(1)
.withType(Event.class)
.withIgnoreLeadingWhiteSpace(true)
.build();
return csvToBean.iterator().next();
}
非常感谢任何帮助我指出正确方向的帮助。
您正在使用DefaultLineMapper
并尝试在其中设置LineTokenizer
和FieldSetMapper
,但这不是您共享的链接中提到的内容。
您需要基于 OpenCSV 的LineMapper
接口的自定义实现:
public class OpenCSVLineMapper<T> implements LineMapper<T> {
@Override
public T mapLine(String line, int lineNumber) throws Exception {
// TODO use OpenCSV to map a line to a POJO of type T
return null;
}
}
OpenCSV 提供 API 来读取文件和 map 数据到对象。 您不需要读取部分,因为这将由 Spring Batch 中的FlatFileItemReader
完成,您只需将 OpenCSV 用于映射部分。
完成后,您可以在FlatFileItemReader
上设置基于 OpenCSV 的线映射器实现:
public FlatFileItemReader<Event> reader() throws IOException {
FlatFileItemReader<Event> itemReader = new FlatFileItemReader<Event>();
itemReader.setResource(new FileSystemResource(inputFilePath));
itemReader.setLinesToSkip(1);
itemReader.setLineMapper(new OpenCSVLineMapper<>());
return itemReader;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.