【发布时间】:2018-08-15 05:57:32
【问题描述】:
下面是一个自定义的平面文件项目阅读器的代码,它可以读取多个项目
public class MultipleItemsFlatFileReader<T> implements ItemReader<List<T>>, ItemStream {
private FlatFileItemReader<T> reader;
private int fetchSize;
public void setReader(String readerName, String filePath, String[] headers, int[] includedFileds,
Class<? extends T> c, int fetchSize) {
this.reader = CustomFlatFileReader.getReader(readerName, filePath, headers, includedFileds, c);
this.fetchSize = fetchSize;
}
@Override
public List<T> read() throws Exception{
List<T> items = new ArrayList<>();
for (int count = 0; count < this.fetchSize; count++) {
T item = reader.read();
if (item == null) {
break;
}
items.add(item);
}
if (!items.isEmpty()) {
return items;
}
return null;
}
@Override
public void open(ExecutionContext executionContext) {
reader.open(executionContext);
}
@Override
public void update(ExecutionContext executionContext) {
reader.update(executionContext);
}
@Override
public void close() {
reader.close();
}
}
以下是自定义项目编写器的代码
public class MultipleItemsCompositeJdbcWriter<T> implements ItemWriter<List<T>> {
private List<JdbcBatchItemWriter<T>> delegates;
public void setDelegates(List<JdbcBatchItemWriter<T>> writers) {
this.delegates = writers;
}
@Override
public void write(List<? extends List<T>> items) throws Exception {
for (JdbcBatchItemWriter<T> writer: delegates) {
for (List<T> item: items) {
writer.write(item);
}
}
}
}
我是春季批次的新手。这段代码正确吗?我可能会丢失任何用例吗?目前我的批处理作业按顺序执行,但将来可能会使用多线程和分区。
我需要在处理器中进行数据库查找。对多个项目进行查找比对单个项目进行查找要好。
【问题讨论】:
-
欢迎来到 SO。我添加了一个答案,如果有帮助请接受:stackoverflow.com/help/someone-answers。谢谢。
标签: spring-batch