如何 运行 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
请看一下docs。
可能是 Spring Batch Multiple Threads and How to set up multi-threading in Spring Batch? 的副本。
更新:
我使用以下代码异步启动批处理作业。但是我不知道怎么限制你说的最大执行次数。
TaskExecutor taskExecutor = new SimpleAsyncTaskExecutor();
taskExecutor.execute(new Runnable() {
public void run() {
try {
jobLauncher.run(importJob, jobParametersBuilder.toJobParameters());
} catch (Exception e){
e.printStackTrace();
}
}
});
您可以将 ThreadPoolTaskExecutor 设置为 SimpleJobLauncher 使用的任务执行器(实际启动作业的 class)。这个执行器有一些你可以设置的属性,尤其是 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;
}
我正在使用 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
请看一下docs。
可能是 Spring Batch Multiple Threads and How to set up multi-threading in Spring Batch? 的副本。
更新:
我使用以下代码异步启动批处理作业。但是我不知道怎么限制你说的最大执行次数。
TaskExecutor taskExecutor = new SimpleAsyncTaskExecutor();
taskExecutor.execute(new Runnable() {
public void run() {
try {
jobLauncher.run(importJob, jobParametersBuilder.toJobParameters());
} catch (Exception e){
e.printStackTrace();
}
}
});
您可以将 ThreadPoolTaskExecutor 设置为 SimpleJobLauncher 使用的任务执行器(实际启动作业的 class)。这个执行器有一些你可以设置的属性,尤其是 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;
}