首页 > 解决方案 > Spring Batch - 映射和写入 1-> 多行

问题描述

我有一个看起来像这样的电子表格...

    US LC   US MC
40  55.39   3.26
39  54.39   1.26

这是它的 POJO:

@Data
public class ExcelObject {
    private BigDecimal timePeriod;
    private BigDecimal usLc;
    private BigDecimal usMc;
}

我需要像这样转换这张表并将其保存到数据库中......

TIME_PERIOD, LABEL, ALLOCATION
40, "US LC", 55.39
40, "US MC",  3.26
39, "US LC", 54.39
39, "US MC",  1.26

这是转换后的 POJO ExcelObject

@Data
public class ExcelItem {
    private BigDecimal timePeriod;
    private String label;
    private BigDecimal allocation;
}

完成此转换的最佳 Spring Batch 策略是什么?我有一个行映射器来映射电子表格中的数据。我想在我的处理器中进行转换。但是如何从处理器返回 4 个结果并写入 4 行?谢谢。

标签: spring-batch

解决方案


实现一个ItemReader阅读ExcelObject

public class MyItemReader implements ItemReader<ExcelObject>  {

    @Override
    ExcelObject read() {

    }
}

然后 aItemProcessor转换ExcelObject为 a List<ExcelItem>

public class MyItemProcessor implements ItemProcessor<ExcelObject,List<ExcelItem>> {
    
    @Override
    List<ExcelItem> process(ExcelObject){

    }

}

最后,一个ItemWriter来写List<ExcelItem>。在 writer 中,您可以循环项目并重用 spring-batch 提供的现有项目ItemWriter并委托给它来编写项目,例如:

public class MyItemWriter implements ItemWriter<List<ExcelItem>> {

        @Autowired
        private JdbcBatchItemWriter<ExcelItem> jdbcWriter;
    
        @Override
        public void write(List<List<ExcelItem>> items) throws Exception {
            
            for(List<ExcelItem> item : items){
                jdbcWriter.writer(item);
            }
        }
}

推荐阅读