Spring Batch如何配置自定义Reader实现数据映射到POJO数组字段
Spring Batch 制表符分隔文件读取映射到POJO数组字段实现方案
直接使用Spring Batch自带的FlatFileItemReader搭配自定义字段映射逻辑即可实现需求,不需要额外引入第三方依赖,具体配置步骤如下:
- 首先确保POJO提供数组属性的get/set方法,否则Spring Batch无法通过反射注入属性值:
public class SamplePojo { private Object[] value; public Object[] getValue() { return value; } public void setValue(Object[] value) { this.value = value; } }
- 配置
FlatFileItemReader,指定制表符为分隔符,通过FieldSetMapper完成字段到数组的自动映射:
@Bean public FlatFileItemReader<SamplePojo> tsvSampleReader() { return new FlatFileItemReaderBuilder<SamplePojo>() .name("tsvSampleReader") // 替换为实际的输入文件路径 .resource(new FileSystemResource("your/input/file/path.tsv")) // 配置分词器,使用制表符作为列分隔符 .lineTokenizer(new DelimitedLineTokenizer() {{ setDelimiter(DelimitedLineTokenizer.DELIMITER_TAB); }}) // 自定义映射规则 .fieldSetMapper(fieldSet -> { SamplePojo pojo = new SamplePojo(); // getValues()会按列顺序返回当前行所有字段值,下标从0开始,正好匹配需求的映射规则 pojo.setValue(fieldSet.getValues()); return pojo; }) // 如果输入文件有表头行,放开下面注释跳过第一行 // .linesToSkip(1) .build(); }
配置说明
- 上述配置不需要提前固定文件列数,
fieldSet.getValues()会自动识别当前行的所有列,按读取顺序存入数组,第一列对应value[0]、第二列对应value[1],完全符合要求的映射规则。 - 默认读取到的字段值为String类型,可以直接赋值给
Object[]类型属性。如果需要做类型转换(比如转数字、日期),可以在fieldSetMapper逻辑中遍历返回的数组做自定义转换后再赋值。 - 如果文件存在空行、格式异常行,可以额外配置异常处理逻辑,跳过不符合格式的行避免任务中断。
内容的提问来源于stack exchange,提问作者Vikram
相关产品推荐
相关产品推荐

