Spring Batch比较两个文件并找到匹配的记录

时间:2015-02-13 15:16:37

标签: java spring-batch

无论如何,我们可以根据任何特定列比较两个不同的文件,并使用Spring Batch从一个文件中获取值。

例如:

文件1内容:

FirstName, LastName, Age

文件2内容:

FirstName, LastName, Business

我的要求是基于FirstName和LastName,我需要获取Business字段。基本上我将迭代文件1并在文件2中搜索以检查匹配记录。

目前我正在做的是使用Apache Lucene索引文件2并使用Spring Batch迭代文件1并在Lucene Index中搜索以获取匹配的文档。

我正在寻找使用Spring Batch或任何其他框架的类似功能?

此致 香卡

1 个答案:

答案 0 :(得分:0)

如果您想要排序输入文件的路径,这样的事情应该有效:

public class MergingItemReader implements ItemStreamReader<MergedRecord> {

    private ItemStreamReader<RecordTypeA> readerA;
    private ItemStreamReader<RecordTypeB> readerB;

    @Override
    public MergedRecord read() throws Exception {
        RecordTypeA itemA = readerA.read();
        RecordTypeB itemB = readerB.read();
        Assert.isTrue(itemA.getKey().equals(itemB.getKey()), "Inconsistent data");
        return new MergedRecord(itemA, itemB);
    }

    @Override
    public void open(ExecutionContext executionContext) throws ItemStreamException {
        readerA.open(executionContext);
        readerB.open(executionContext);
    }

    @Override
    public void update(ExecutionContext executionContext) throws ItemStreamException {
        readerA.update(executionContext);
        readerB.update(executionContext);
    }

    @Override
    public void close() throws ItemStreamException {
        readerA.close();
        readerB.close();
    }

    public void setReaderA(ItemStreamReader<RecordTypeA> readerA) {
        this.readerA = readerA;
    }

    public void setReaderB(ItemStreamReader<RecordTypeB> readerB) {
        this.readerB = readerB;
    }

}

关于CompositeItemReader的其他问题:没有这样的事情。也许你会把它与CompositeItemWriter混淆。