我需要从远程linux盒位置通过块读取CSV文件(由40k+记录组成),然后将块信息传递给处理器和写入器,而无需在本地下载文件,我想获得如何实现这一要求的想法或参考。
我已经通过了下面的方法,但我不确定这些方法是否以块读取文件,我还看到有"sftpremotefiletemplate">有人可以建议我是否在正确的方向,或者我需要使用sftpremotefiletemplate(或任何其他方法)?
@Bean
public Job readRemoteCsvFileJob(Step step1) {
return jobBuilderFactory.get("readRemoteCsvFileJob")
.incrementer(new RunIdIncrementer())
.flow(step1)
.end()
.build();
}
@Bean
public Step step1(ItemReader<MyItem> reader, ItemWriter<MyItem> writer) {
return stepBuilderFactory.get("step1")
.<MyItem, MyItem>chunk(10)
.reader(reader)
.writer(writer)
.build();
}
@Bean
public FlatFileItemReader<MyItem> reader() {
FlatFileItemReader<MyItem> reader = new FlatFileItemReader<>();
reader.setResource(new UrlResource("/remote-path/myfile.csv"));
reader.setLineMapper(new DefaultLineMapper<MyItem>() {{
setLineTokenizer(new DelimitedLineTokenizer() {{
setNames(new String[]{"field1", "field2"});
}});
setFieldSetMapper(new BeanWrapperFieldSetMapper<MyItem>() {{
setTargetType(MyItem.class);
}});
}});
return reader;
}
谁能告诉我方向是否正确
是的,使用URLResource
和FlatFileItemReader
是可行的方法。读取器将从远程位置以块的形式传输数据,它不会在本地下载文件。