Spring Batch Process ZipEntries в ZipFile параллельно - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть Zip-файл, в котором много записей, я хочу обработать его с помощью Spring Batch. Читая документацию, я не видел, как я могу разделить выполнение на основе zip-записи.

без подпружиненной партии

ZipFile zipFile = new ZipFile("./large-files.zip"); 
        Enumeration<? extends ZipEntry> entries = zipFile.entries();
        int entriesCount = 0;
        while (entries.hasMoreElements()) {
            entriesCount++;
            processInParallel(zipFile, entries.nextElement());
           // executorService.submit(()-> { //do something with entries.nextElement() }); 
        }

enter image description here

Как я могу добиться этого с помощью Spring Batch?

1 Ответ

0 голосов
/ 08 апреля 2019

Вы можете использовать TaskExecutor от Spring для включения параллельной обработки.В вашем itemReader убедитесь, что у вас есть синхронизированный метод, чтобы убедиться, что никакие два потока не получат один и тот же файл из .zip для обработки.

/**
 * Enables parallel processing based on configured number of threads
 * 
 * @return
 */
@Bean
public TaskExecutor taskExecutor() {
    SimpleAsyncTaskExecutor taskExecutor = new SimpleAsyncTaskExecutor();
    taskExecutor.setConcurrencyLimit(5);
    return taskExecutor;
}


@Bean
protected Step step1() {
    return stepBuilderFactory.get("step1")
            .<DOMAIN_OBJ, DOMAIN_OBJ>chunk(1).reader(myReader)
            .chunk(1).processor(myProcessor).chunk(1).writer(myWriter).chunk(1).taskExecutor(taskExecutor())
            .throttleLimit(maxThreads).build();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...