2015-05-19 253 views
1

我在Spring Boot中使用@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”与paramater开始作业之前完成“ B”。

有没有一种方法可以同时运行这些作业?

谢谢!

+0

是否使用默认的'JobLauncher'?如果是这样,则默认情况下是同步的。 –

回答

2

您可以在某个配置文件中定义您的JobLauncher,并将SimpleAsyncTaskExecutor设置为任务执行器,该任务执行器将运行异步作业(不等待一个完成以启动下一个作业)。

下面是代码片段来自:

@Bean 
public JobLauncher jobLauncher() { 
    final SimpleJobLauncher jobLauncher = new SimpleJobLauncher(); 
    jobLauncher.setJobRepository(jobRepository); 
    final SimpleAsyncTaskExecutor simpleAsyncTaskExecutor = new SimpleAsyncTaskExecutor(); 
    jobLauncher.setTaskExecutor(simpleAsyncTaskExecutor); 
    return jobLauncher; 
} 
+0

谢谢!这工作:) –