![](/img/trans.png)
[英]How to read all files in a folder with spring-batch and MultiResourceItemReader?
[英]How to read multiple files in chunks using Spring-Batch?
我正在使用Spring-Batch
通過MultiResourceItemReader
順序讀取csv
文件。
我想創建一個讀者
現在, MultiResourceItemReader
的問題在於它將首先以塊的形式讀取完整的file1,並且在文件完成后,它將繼續以file2進行讀取。
如何創建批處理步驟,以基於塊大小在文件之間切換?
您將需要創建一個自定義閱讀器來解決您的嘗試。 您可以在內部使用FlatFileItemReader
進行實際的文件讀取,但是一次必須從兩個文件中讀取的邏輯必須進行協調。 只是從頭頂開始編碼,我期望這樣的事情:
public class MultiFileReader implements ItemReader<SomeObject> {
private List<ItemStreamReader> readers;
public SomeObject read() {
SomeObject domainObject = new SomeObject();
for(ItemStreamReader curReader : readers) {
domainObject.add(curReader.read());
}
return domainObject;
}
}
您可以使用類似
@Bean
public MultiResourceItemReader<Company> readerCompany() throws IOException {
DelimitedLineTokenizer dlt = new DelimitedLineTokenizer();
dlt.setDelimiter("^");
dlt.setNames("name", "cui", "code", "euid", "companyState", "address");
dlt.setStrict(false);
return new MultiResourceItemReaderBuilder<Company>()
.name("readerCompany")
.resources(inputCompanyResources)
.delegate(new FlatFileItemReaderBuilder<Company>()
.name("getCompanyStatusReader")
.fieldSetMapper(new FieldSetMapper<Company>() {
@Override
public Company mapFieldSet(FieldSet fieldSet) throws BindException {
return Company.builder()
.name(fieldSet.readString("name"))
.localId(fieldSet.readString("cui"))
.code(fieldSet.readString("code"))
.companyStatus(readCompanyStatuses(fieldSet.readString("companyState")))
.address(fieldSet.readString("address"))
.internationalId(fieldSet.readString("euid"))
.build();
}
})
.linesToSkip(1)
.lineTokenizer(dlt)
.build())
.build();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.