如何处理单个csv文件multiThreaded而不使用Spring-Batch拆分它

时间:2015-02-08 15:58:35

标签: spring spring-batch spring-batch-admin

我正在使用Spring批处理来处理csv文件。

这是我在工作中的一步:

 @Bean
    public Step processSnidUploadedFileStep() {
        return stepBuilderFactory.get("testJob")
                .<MyItem, MyItem>chunk(1) //important to be one in this case to commit after every line read
                .reader(..)

                .processor(processor(...))
                .writer(writer)
                .taskExecutor(infrastructureConfigurationService.taskExecutor())   
               .build();
    }

正如您所看到的,我添加了taskExecutor,以便让多个线程读取同一文件中的行以便更快地执行。

public class BatchConfiguration implements InfrastructureConfigurationService {
..
 @Bean
    public TaskExecutor taskExecutor() {
        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
        taskExecutor.setMaxPoolSize(4);
        taskExecutor.afterPropertiesSet();
        return taskExecutor;
    }

现在我的writer()中有一个测试用途,我添加了Thread.sleep(10000)以查看我实际并行运行(并行读取文件中的多行):

 @Override
    public void write(List<? extends MyItem> items) throws Exception {

        for (MyItem item : items) {
            log.info(item.toString();
            Thread.sleep(1000000);
        }
  1. 一旦我调用Thread.sleep(..)行,整个作业就会卡住..(我看不到其他线程调用的方法 - 在我的例子中4个线程

  2. 我读到我需要将文件拆分成小文件而不是使用分区?那是怎么做的?我错过了什么吗?

  3. 谢谢。

0 个答案:

没有答案