我正在使用Spring-Batch
使用MultiResourceItemReader
按顺序读取csv
文件。
我想创造一个读者
现在,MultiResourceItemReader的问题是,它将首先分块读取完整的文件1,当文件完成时,它将继续读取文件2。
如何创建基于块大小在文件之间切换的批处理步骤?
你可以用像这样的东西
@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();
}
您需要创建一个自定义阅读器来解决您正在尝试的问题。您可以使用引擎盖下的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;
}
}
我有两个输入文件,分别是File1和File2。File1包含部分记录,其余部分记录分散到File2,为了创建一条记录,我需要同时读取File1和File2。每条记录的唯一键将位于记录之前的File1和File2中。请您帮助我们如何使用Spring batch reader实现此功能。
我尝试使用spring batch从一个表中读取数据并写入其他表,但现在我的要求是从多个表中读取数据并写入一个文件,所以我们可以通过定义多个作业来实现这一点,但我想使用单个作业来实现,即单个读取器、单个写入器和单个处理器。 请为我提供一些关于这个场景的参考资料。
问题内容: 我想配置为顺序读取特定文件夹内的所有文件。 由于委托将尝试打开一个名为的文件,因此以下内容无效,这当然是无效的。我要在这里更改什么? 等效的xml配置将编写如下,如何将其重写为仅Java的配置? 问题答案: 我认为您应该使用。
我正在使用spring批处理入站文件,下面是我的用例 将收到包含15个CSV格式文件的zip 我需要并行处理它们 在处理完所有文件后,需要进行一些计算并发送报告 有人能建议我如何使用Spring Batch实现这一点吗?
到目前为止,我的方法是: 挑战是:不能使用。如何正确使用?
问题内容: 如何从倍数数据库中读取项目?我已经知道从文件中可以做到。 以下示例适用于从多个文件读取 这样三个豆子 问题答案: 没有可立即使用的组件可以执行您的要求;唯一的解决方案是编写一个委托给(或委托给或委托给任何通用实现)的自定义。 您需要准备所有必要的东西(数据源,会话,实际数据库读取器),并将所有委派的读取器绑定到您的自定义读取器。 编辑:您需要使用recussion来模拟一个循环,并在整