如何线程池运行弹簧批处理作业



我正在使用JobLauncher.run()开始spring-batch工作。问:如何对这些调用进行线程池化?因此,例如最多可以同时运行 4 个作业线程,并且是否有任何其他作业只是排队?

    @Autowired
    private JobRegistry registry;
    @Autowired
    private JobLauncher launcher;
Job job = registry.getJob("jobname");
launcher.run(job, params); //immediately starts the job

您可以将 ThreadPoolTaskExecutor 设置为 SimpleJobLauncher(实际启动作业的类)使用的任务执行器。此执行器具有一些可以设置的属性,尤其是 maxPoolSize。

public JobLauncher createJobLauncher() {
    ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
    taskExecutor.setCorePoolSize(4);
    taskExecutor.setMaxPoolSize(4);
    taskExecutor.afterPropertiesSet();
    SimpleJobLauncher launcher = (SimpleJobLauncher) super.createJobLauncher();
    launcher.setTaskExecutor(taskExecutor);
    return launcher;
}

请查看文档。

可能是Spring Batch Multi Threads和如何在Spring Batch中设置多线程的副本。

更新:

我使用以下代码异步启动批处理作业。但是我不知道如何限制您提到的最大执行次数。

TaskExecutor taskExecutor = new SimpleAsyncTaskExecutor();
taskExecutor.execute(new Runnable() {
    public void run() {
        try {
            jobLauncher.run(importJob, jobParametersBuilder.toJobParameters());
        } catch (Exception e){
            e.printStackTrace();
        }
    }
});

相关内容

  • 没有找到相关文章

最新更新