Multithreading 使用分割器的弹簧批并行处理

Multithreading 使用分割器的弹簧批并行处理,multithreading,spring-batch,Multithreading,Spring Batch,处理多个线程数量有限的文件,但这些文件无法正常工作。任务完成后,该线程无法重复使用。启用可将多个文件传递给数量有限的线程 @Bean public Step orderStep1() throws IOException { return stepBuilderFactory.get("orderStep1") .partitioner("slaveStep", partitioner()) .step(sl

处理多个线程数量有限的文件,但这些文件无法正常工作。任务完成后,该线程无法重复使用。启用可将多个文件传递给数量有限的线程

@Bean
    public Step orderStep1() throws IOException {
        return stepBuilderFactory.get("orderStep1")
                .partitioner("slaveStep", partitioner())
                .step(slaveStep())
                .gridSize(40)
                .taskExecutor(taskExecutor1())
                 .build();
    }
@Bean
    public ThreadPoolTaskExecutor taskExecutor1() {
    ThreadPoolTaskExecutor taskExecutor1 = new ThreadPoolTaskExecutor();
    taskExecutor1.setCorePoolSize(30);
    return taskExecutor1;
}
 @Bean
    @StepScope
    public FlatFileItemReader<GPRSDAO> reader( 
            @Value("#{stepExecutionContext['file']}") String file 
            ) { 
         reader = new FlatFileItemReader<GPRSDAO>();
         reader.setResource(new FileSystemResource(file));
            reader.setLineMapper(new DefaultLineMapper<GPRSDAO>() {
              {
                setLineTokenizer(new DelimitedLineTokenizer() {
                  {
                     setNames(new String[] { "firstName","lastName"  });
                  }
                });
                setFieldSetMapper(new BeanWrapperFieldSetMapper<GPRSDAO>() {
                  {
                    setTargetType(GPRSDAO.class);
                  }
                });
              }
            }); 
            reader.close();
         return reader; }

Input files=100(set dynamically during runtime using stepExecutionContext)
@Bean
公共步骤orderStep1()引发IOException{
返回stepBuilderFactory.get(“orderStep1”)
.partitioner(“slaveStep”,partitioner())
.步骤(slaveStep())
.gridSize(40)
.taskExecutor(taskExecutor 1())
.build();
}
@豆子
公共线程池TaskExecutor TaskExecutor 1(){
ThreadPoolTaskExecutor TaskExecutor 1=新的ThreadPoolTaskExecutor();
TaskExecutor 1.setCorePoolSize(30);
返回任务执行器1;
}
@豆子
@步进镜
公共FlatFileItemReader(
@值(“#{stepExecutionContext['file']}”)字符串文件
) { 
reader=新FlatFileItemReader();
setResource(新文件系统资源(文件));
reader.setLineMapper(新的DefaultLineMapper(){
{
setLineTokenizer(新的DelimitedLineTokenizer(){
{
setNames(新字符串[]{“firstName”,“lastName”});
}
});
setFieldSetMapper(新的BeanRapperFieldSetMapper(){
{
setTargetType(GPRSDAO.class);
}
});
}
}); 
reader.close();
返回读取器;}
输入文件=100(使用stepExecutionContext在运行时动态设置)
任务完成后,该线程不能重复使用。允许将多个文件传递给数量有限的线程

@Bean
    public Step orderStep1() throws IOException {
        return stepBuilderFactory.get("orderStep1")
                .partitioner("slaveStep", partitioner())
                .step(slaveStep())
                .gridSize(40)
                .taskExecutor(taskExecutor1())
                 .build();
    }
@Bean
    public ThreadPoolTaskExecutor taskExecutor1() {
    ThreadPoolTaskExecutor taskExecutor1 = new ThreadPoolTaskExecutor();
    taskExecutor1.setCorePoolSize(30);
    return taskExecutor1;
}
 @Bean
    @StepScope
    public FlatFileItemReader<GPRSDAO> reader( 
            @Value("#{stepExecutionContext['file']}") String file 
            ) { 
         reader = new FlatFileItemReader<GPRSDAO>();
         reader.setResource(new FileSystemResource(file));
            reader.setLineMapper(new DefaultLineMapper<GPRSDAO>() {
              {
                setLineTokenizer(new DelimitedLineTokenizer() {
                  {
                     setNames(new String[] { "firstName","lastName"  });
                  }
                });
                setFieldSetMapper(new BeanWrapperFieldSetMapper<GPRSDAO>() {
                  {
                    setTargetType(GPRSDAO.class);
                  }
                });
              }
            }); 
            reader.close();
         return reader; }

Input files=100(set dynamically during runtime using stepExecutionContext)
您将核心池大小设置为30,但未设置参数。您需要设置最大池大小以限制线程数

@Bean
    public Step orderStep1() throws IOException {
        return stepBuilderFactory.get("orderStep1")
                .partitioner("slaveStep", partitioner())
                .step(slaveStep())
                .gridSize(40)
                .taskExecutor(taskExecutor1())
                 .build();
    }
@Bean
    public ThreadPoolTaskExecutor taskExecutor1() {
    ThreadPoolTaskExecutor taskExecutor1 = new ThreadPoolTaskExecutor();
    taskExecutor1.setCorePoolSize(30);
    return taskExecutor1;
}
 @Bean
    @StepScope
    public FlatFileItemReader<GPRSDAO> reader( 
            @Value("#{stepExecutionContext['file']}") String file 
            ) { 
         reader = new FlatFileItemReader<GPRSDAO>();
         reader.setResource(new FileSystemResource(file));
            reader.setLineMapper(new DefaultLineMapper<GPRSDAO>() {
              {
                setLineTokenizer(new DelimitedLineTokenizer() {
                  {
                     setNames(new String[] { "firstName","lastName"  });
                  }
                });
                setFieldSetMapper(new BeanWrapperFieldSetMapper<GPRSDAO>() {
                  {
                    setTargetType(GPRSDAO.class);
                  }
                });
              }
            }); 
            reader.close();
         return reader; }

Input files=100(set dynamically during runtime using stepExecutionContext)
任务完成后,该线程不能重复使用。允许将多个文件传递给数量有限的线程

@Bean
    public Step orderStep1() throws IOException {
        return stepBuilderFactory.get("orderStep1")
                .partitioner("slaveStep", partitioner())
                .step(slaveStep())
                .gridSize(40)
                .taskExecutor(taskExecutor1())
                 .build();
    }
@Bean
    public ThreadPoolTaskExecutor taskExecutor1() {
    ThreadPoolTaskExecutor taskExecutor1 = new ThreadPoolTaskExecutor();
    taskExecutor1.setCorePoolSize(30);
    return taskExecutor1;
}
 @Bean
    @StepScope
    public FlatFileItemReader<GPRSDAO> reader( 
            @Value("#{stepExecutionContext['file']}") String file 
            ) { 
         reader = new FlatFileItemReader<GPRSDAO>();
         reader.setResource(new FileSystemResource(file));
            reader.setLineMapper(new DefaultLineMapper<GPRSDAO>() {
              {
                setLineTokenizer(new DelimitedLineTokenizer() {
                  {
                     setNames(new String[] { "firstName","lastName"  });
                  }
                });
                setFieldSetMapper(new BeanWrapperFieldSetMapper<GPRSDAO>() {
                  {
                    setTargetType(GPRSDAO.class);
                  }
                });
              }
            }); 
            reader.close();
         return reader; }

Input files=100(set dynamically during runtime using stepExecutionContext)

您将核心池大小设置为30,但未设置参数。您需要设置最大池大小以限制线程数。

欢迎使用SO。根据这里的代码,看起来您在中采用了解决方案,但没有接受答案。请接受以下答案:。欢迎访问SO。根据这里的代码,看起来您在中采用了解决方案,但没有接受答案。请接受答案:。
@Bean
    public Step orderStep1() throws IOException {
        return stepBuilderFactory.get("orderStep1")
                .partitioner("slaveStep", partitioner())
                .step(slaveStep())
                .gridSize(40)
                .taskExecutor(taskExecutor1())
                 .build();
    }
@Bean
    public ThreadPoolTaskExecutor taskExecutor1() {
    ThreadPoolTaskExecutor taskExecutor1 = new ThreadPoolTaskExecutor();
    taskExecutor1.setCorePoolSize(30);
    return taskExecutor1;
}
 @Bean
    @StepScope
    public FlatFileItemReader<GPRSDAO> reader( 
            @Value("#{stepExecutionContext['file']}") String file 
            ) { 
         reader = new FlatFileItemReader<GPRSDAO>();
         reader.setResource(new FileSystemResource(file));
            reader.setLineMapper(new DefaultLineMapper<GPRSDAO>() {
              {
                setLineTokenizer(new DelimitedLineTokenizer() {
                  {
                     setNames(new String[] { "firstName","lastName"  });
                  }
                });
                setFieldSetMapper(new BeanWrapperFieldSetMapper<GPRSDAO>() {
                  {
                    setTargetType(GPRSDAO.class);
                  }
                });
              }
            }); 
            reader.close();
         return reader; }

Input files=100(set dynamically during runtime using stepExecutionContext)