我需要读取csv文件,处理并写入数据库。
场景是
我读了一行数据,这行我有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...
}
}
}
由于记录类型的数量是固定的,并且遵循让一件事做一件事并做好的unix哲学,我会为每个类型创建一个编写器,并将这些编写器注册为分类器复合编写器中的委托。
这肯定比同一个作者的几十个if/else语句要好。原因是,当您想为新记录类型添加新写入程序时,您只会为该类型创建一个新写入程序并将其注册到组合中,而不是通过添加额外的if语句来修改单个写入程序。