知方号

知方号

用于并行处理的Spring Batch中TaskExecutor的实现

考虑一个步骤bean:

代码语言:javascript复制@Bean public Step stepForChunkProcessing() { return stepBuilderFactory .get("stepForChunkProcessing") .chunk(1000) .reader(reader()) .processor(processor()) .writer(writer()) .taskExecutor(taskExecutor()) .throttleLimit(10) .build(); }//@formatter:on @Bean public TaskExecutor taskExecutor(){ return new SimpleAsyncTaskExecutor("MyApplication"); }

要求:在阅读器中,它从文件中读取(Entity1的)记录。在Processor中,它进行处理,在Writer中,它写入数据库。

在TaskExecutor之前,只创建了一个线程,它会在上面的块设置中定义的阅读器和处理器中循环1000次。然后它将移动到写入器,并写入所有1000条记录。同样,它将从记录号1001开始,然后在Reader和Processor中处理另外1000条记录。这是同步执行。

在TaskExecutor和限制为10之后,创建了10个相互独立的线程。它们将如何维护文件中已被其他线程处理的记录的数量?还要考虑如果我在阅读器的Read方法中给出了synchronized关键字,那么为什么不同的线程会检查文件中已经处理过的记录呢?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。