Spring 批处理比较两个文件并找到匹配的记录
Spring Batch to Compare two files and find a matching records
我们是否可以根据任何特定列比较两个不同的文件,并使用 Spring 批处理从一个文件中获取值。
例如:
文件 1 内容:
FirstName, LastName, Age
文件 2 内容:
FirstName, LastName, Business
我的要求是基于 FirstName 和 LastName,我需要获取 Business 字段。基本上我会迭代文件 1 并在文件 2 中搜索以检查匹配记录。
目前我正在做的是使用 Apache Lucene 索引文件 2 并使用 Spring 批量迭代文件 1 并在 Lucene 索引中搜索以获取匹配的文档。
我正在寻找使用 Spring Batch 或任何其他框架的类似功能?
此致,
香卡
如果你想走排序输入文件的路线,这样的事情应该有效:
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
.
混淆了
我们是否可以根据任何特定列比较两个不同的文件,并使用 Spring 批处理从一个文件中获取值。
例如:
文件 1 内容:
FirstName, LastName, Age
文件 2 内容:
FirstName, LastName, Business
我的要求是基于 FirstName 和 LastName,我需要获取 Business 字段。基本上我会迭代文件 1 并在文件 2 中搜索以检查匹配记录。
目前我正在做的是使用 Apache Lucene 索引文件 2 并使用 Spring 批量迭代文件 1 并在 Lucene 索引中搜索以获取匹配的文档。
我正在寻找使用 Spring Batch 或任何其他框架的类似功能?
此致, 香卡
如果你想走排序输入文件的路线,这样的事情应该有效:
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
.