我正在创建一个作业,它将根据输入参数读取和处理不同的 .csv 文件。有 3 种不同类型的 .csv 文件,它们具有不同的标题。我想使用通用的将文件的每一行映射到 POJO FlatFileItemReader
。
每种类型的文件都有自己的 POJO 实现,所有“文件特定 POJO”都是从 abstract 子类化的GenericFilePOJO
。
tasklet 将首先读取输入参数以决定需要读取哪种文件类型,并构造一个带有适当标题列的 LineTokenizer。它将这些信息放在 infoHolder 中,以便在阅读器步骤中检索。
@Bean
public FlatFileItemReader<GenericFilePOJO> reader() {
FlatFileItemReader<RawFile> reader = new FlatFileItemReader<GenericFilePOJO>();
reader.setLinesToSkip(1); // header
reader.setLineMapper(new DefaultLineMapper() {
{
// The infoHolder will contain the file-specific LineTokenizer
setLineTokenizer(infoHolder.getLineTokenizer());
setFieldSetMapper(new BeanWrapperFieldSetMapper<GenericFilePOJO>() {
{
setTargetType(GenericFilePOJO.class);
}
});
}
});
return reader;
}
尽管返回了GenericFilePOJO
?