使用分隔器的春季批处理并行处理

时间:2020-01-31 12:07:18

标签: multithreading spring-batch

处理许多线程数量有限的文件无法正常工作。任务完成后,该线程无法重用。允许将多个文件传递给数量有限的线程。

@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)

1 个答案:

答案 0 :(得分:0)

任务完成后,该线程无法重用。允许将多个文件传递给有限数量的线程。

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