Spring Batch-定制的读写器

时间:2018-08-15 05:57:33

标签: spring-batch

下面是定制的平面文件项目读取器的代码,该读取器可以读取多个项目

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);
        }
    }
}

}

我是春季批处理的新手。此代码正确吗?我可能会缺少任何用例吗?目前,我的批处理作业是按顺序执行的,但将来可能会使用多线程和分区。

需要这样做的是,我需要在处理器中进行数据库查找。对多个项目进行查找比对单个项目进行查找更好。

1 个答案:

答案 0 :(得分:0)

  

Is this code correct?

答案取决于您的工作规格。在您的情况下,看起来一个项目是平面文件中多个物理行的逻辑组。

对于读者而言,文档中的以下部分会有所帮助:https://docs.spring.io/spring-batch/4.0.x/reference/html/common-patterns.html#multiLineRecords

此用例还有两个示例:

对于编写者,您可以使用CompositeItemWriter与多个编写者一起编写项目。此处有更多详细信息:https://docs.spring.io/spring-batch/4.0.x/api/org/springframework/batch/item/support/CompositeItemWriter.html