[英]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.