我正在使用Partitioner
來並行化*.csv
文件的導入。該文件夾中有大約30k個文件。在Spring-Batch中使用分區程序的初始化時間過長?
問題:作業初始化大約需要1-2個小時,直到所有文件都設置好。瓶頸在SimpleStepExecutionSplitter.split()
。
問題:步驟初始化需要多少時間是正常嗎?或者我能否以某種方式改進它?
@Bean
public Step partitionStep(Partitioner partitioner) {
return stepBuilderFactory.get("partitionStep")
.partitioner(step())
.partitioner("partitioner", partitioner)
.taskExecutor(taskExecutor())
.build();
}
@Bean
public TaskExecutor taskExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize(4); //run import always with 4 parallel files
taskExecutor.setMaxPoolSize(4);
taskExecutor.afterPropertiesSet();
return taskExecutor;
}
@Bean
public Partitioner partitioner() throws IOException {
MultiResourcePartitioner p = new MultiResourcePartitioner();
p.setResources(new PathMatchingResourcePatternResolver().getResources("mypath/*.csv"));
return p;
}
我使用'spring.batch.initializer.enabled = false'和'MapJobRepository',因此只在內存中存儲任何元數據。無論如何,批處理作業中的「spring-batch stuff」似乎會減慢速度(對於我的30k文件,我有30k個分區;但是我必須堅持使用「Partitioner」,因爲我必須爲每個文件定義輸出文件名在輸入)。所以可能我不得不在這裏放棄'春季批次'。 – membersound