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() });
}
如何使用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条目并行的主要内容,如果未能解决你的问题,请参考以下文章