多个 spring 批处理作业
Multiple spring batch jobs
我在 Spring 引导中使用 @Scheduled 注释来触发多个作业。
以下是代码片段:
@EnableBatchProcessing
@EnableScheduling
public class Config extends DefaultBatchConfigurer{
@Autowired
JobLauncher launcher;
@Scheduled
public void run(){
String[] argList = {"A", "B"};
for(String char : argList){
launcher.run(job(),
new JobParametersBuilder().
addString("char", char).
toJobParameters());
}
}
public Job job(){
//Job definition is here.
}
}
但是,这会连续触发 2 个作业,而不是并行触发,即应用程序等待参数 "A" 的作业完成,然后再开始参数 "B" 的作业。
有什么方法可以让我运行并行执行这些作业?
谢谢!
您可以在一些配置文件中定义您的 JobLauncher
并将 SimpleAsyncTaskExecutor
设置为任务执行器,它将 运行 作业异步(不等待一个完成以启动下一个).
这是来自 :
的代码片段
@Bean
public JobLauncher jobLauncher() {
final SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(jobRepository);
final SimpleAsyncTaskExecutor simpleAsyncTaskExecutor = new SimpleAsyncTaskExecutor();
jobLauncher.setTaskExecutor(simpleAsyncTaskExecutor);
return jobLauncher;
}
我在 Spring 引导中使用 @Scheduled 注释来触发多个作业。
以下是代码片段:
@EnableBatchProcessing
@EnableScheduling
public class Config extends DefaultBatchConfigurer{
@Autowired
JobLauncher launcher;
@Scheduled
public void run(){
String[] argList = {"A", "B"};
for(String char : argList){
launcher.run(job(),
new JobParametersBuilder().
addString("char", char).
toJobParameters());
}
}
public Job job(){
//Job definition is here.
}
}
但是,这会连续触发 2 个作业,而不是并行触发,即应用程序等待参数 "A" 的作业完成,然后再开始参数 "B" 的作业。
有什么方法可以让我运行并行执行这些作业?
谢谢!
您可以在一些配置文件中定义您的 JobLauncher
并将 SimpleAsyncTaskExecutor
设置为任务执行器,它将 运行 作业异步(不等待一个完成以启动下一个).
这是来自 :
的代码片段@Bean
public JobLauncher jobLauncher() {
final SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(jobRepository);
final SimpleAsyncTaskExecutor simpleAsyncTaskExecutor = new SimpleAsyncTaskExecutor();
jobLauncher.setTaskExecutor(simpleAsyncTaskExecutor);
return jobLauncher;
}