首页 > 解决方案 > Spring 批处理列表(如果用于处理器、分类器和编写器)

问题描述

我需要从 csv 文件中读取,处理并写入 db。

情景是

我读了一行数据,在这一行我有 12 条记录。对于每条记录,我需要执行一个过程(对所有记录执行相同的过程)在此过程之后,每条记录都会转到不同的表(因此不同的写入器 - jdbc)。我可以在这种过程中使用弹簧批处理吗?

在我的处理器中,我可以获取数据行并转换为 12 条记录。

但是我需要在我的分类器(ClassifierCompositeItemWriter)中做什么,它需要接受列表并返回一个列表吗?

这样做不合逻辑

public class EventClassifier implements Classifier<SpecificEvent, ItemWriter<? super List<Event>>> {

    @Override
    public ItemWriter<SpecificEvent> classify(List<Event> events) {
    
        for(Event event : events){
            
            if (ReasonEnum.BANKRUP.getReason().equals(event.getScoreReason())) {
                return bankrupWriter;
            }

            if...
            

        }
    
    }

}

标签: springspring-batch

解决方案


由于记录类型的数量是固定的,并且遵循使一件事做一件事并做好的 Unix 理念,我将为每种类型创建一个编写器,并将这些编写器注册为分类器复合编写器中的代表。

这绝对比同一作者中的几十个 if/else 语句要好。原因是当您想为新记录类型添加新写入器时,您只需为该类型创建一个新写入器并将其注册到您的组合中,而不是通过添加额外的 if 语句来修改单个写入器。


推荐阅读