我有一个简单的 csv 文件,我正在读取 1000 个块,插入到数据库中。现在,如果我想检查该行是否存在于 db 中并且在插入之前是否等于输入,如果存在并且行是否相等-忽略,否则插入或更新,我正在使用 ItemProcessor。实现此之后,意识到 jdbc 调用太慢(平均 120 毫秒),并且想在调用 db 之前对 id 进行批处理并检查输入。在这个阶段,ItemReader 一次将一个项目传递给 ItemProcessor。现在我试图一次将 1000 个项目传递给 ItemProcessor,以便可以对 jdbc 调用进行批处理。在尝试此操作时,能够检查一些示例但无法让读者工作。这是示例代码。
public class customReader implements ItemReader<List<T>> {
private static List<T> records = null;
ItemReader<String> itemReader;
@Autowired customDao customDao;
private int index = 0;
@Override public List<T> read() throws Exception {
//reader logic
//while(records.size() < 1000){
String record = itemReader.read();
if(Objects.isNull(record)){
break;
}
records.add(record);
}
return (List<T>) records;
}
这是配置
@Bean
return stepBuilderFactory
.get("step")
.<List<String>, List<String>>chunk(1000)
.reader(reader())
.processor(processor())
.writer(writer())
.build();
如果有人有一个简单的示例,他们可以将 1000 行 csv 文件的列表传递给处理器,请分享示例。检查了共享的示例:使项目阅读器返回列表而不是单个对象-Spring批处理 获取异常,未经检查的对处理器的调用,编写器等。
Spring Batch - Item Reader 和 ItemProcessor 以及上面检查过的列表,但有例外,如评论中列出的和未检查的类型等。如果您有阅读器、处理器和编写器的工作示例,在一个事务中没有多行,请分享穿线。