spring - 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...
}
}
}
解决方案
由于记录类型的数量是固定的,并且遵循使一件事做一件事并做好的 Unix 理念,我将为每种类型创建一个编写器,并将这些编写器注册为分类器复合编写器中的代表。
这绝对比同一作者中的几十个 if/else 语句要好。原因是当您想为新记录类型添加新写入器时,您只需为该类型创建一个新写入器并将其注册到您的组合中,而不是通过添加额外的 if 语句来修改单个写入器。
推荐阅读
- command - 创建一个 .efi 以禁用 egpu,然后链式加载 bootmgfw.efi
- maven - 根据目标将不同的robots.txt注入war文件的最佳方法是什么?
- html - VBA Microsoft HTML对象库HTML文档HTMLUnknownElement不显示innerHTML或innerText
- perl - 如何在 Perl 中编写 require 语句以从模块中获取 %EXPORT_TAGS?
- android - 如何检查您通讯录中的某人是否安装了该应用程序
- matlab - 如何生成一个欧几里得长度的随机均匀分布向量?
- javascript - 通过 .addEventListener 迭代函数到 div 不起作用
- javascript - 类组件中的 ReactJs 嵌套路由切换
- python - 从数据框中的每个组中删除特定的一组行
- javascript - 如何定期更改状态值?