Zip文件中的Spring批处理Zip条目并行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Zip文件中的Spring批处理Zip条目并行相关的知识,希望对你有一定的参考价值。

我有一个包含许多条目的Zip文件,我想用Spring Batch处理它。阅读文档我没看到如何基于zip条目拆分执行。

没有Spring Batch

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实现这一目标?

答案

您可以使用spring的TaskExecutor来启用并行处理。在你的itemReader中,请确保你有一个synchronized方法,以确保没有两个线程从.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();
}

以上是关于Zip文件中的Spring批处理Zip条目并行的主要内容,如果未能解决你的问题,请参考以下文章

创建 zip 存档时,啥构成重复条目

修改 zipfile 条目的文件内容

如何计算 zip 文件中的特定文件

使用 Minizip API 从 Zip 存档中删除 Zip 条目

Camel Zip有多个条目

java.util.zip获取Zip文件条目InputStream