繁体   English   中英

如何运行spring-batch jobs threadpooled?

[英]How to run spring-batch jobs threadpooled?

我正在使用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

您可以将ThreadPoolTask​​Executor设置为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 Multiple 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();
        }
    }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM