我在BatchScheduler中有多个计划的作业,该作业在特定时间运行。简单的内置JobLauncher,它是同步的。本质上是最初使用的。 现在,我想并行运行作业,以便没有任何作业可以等待其他作业完成。
我尝试在不同的工作上使用@Async批注,但没有成功。
我还尝试为每个作业创建不同的JobLauncher对象,但是它也没有用。
然后,我尝试设置jobLauncher.setTaskExecutor(new SimpleAsyncTaskExecutor())。 但这没有用。
我也尝试过@Bean
public JobLauncher jobLauncher() {
final SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(jobRepository);
final SimpleAsyncTaskExecutor simpleAsyncTaskExecutor = new SimpleAsyncTaskExecutor();
jobLauncher.setTaskExecutor(simpleAsyncTaskExecutor);
return jobLauncher;
}
我尝试了在不同的stackoverflow答案中给出的所有组合,但是没有用。
@Bean
public JobLauncher jobLauncher() {
final SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(jobRepository);
final SimpleAsyncTaskExecutor simpleAsyncTaskExecutor = new SimpleAsyncTaskExecutor();
jobLauncher.setTaskExecutor(simpleAsyncTaskExecutor);
return jobLauncher;
}
实际: 但这也没有用。
就像我检查批处理表中批处理作业的开始时间一样。一项作业完成后,作业开始。
预期: 作业应并行运行。
答案 0 :(得分:0)
此配置对我有用:
import org.springframework.batch.core.configuration.annotation.DefaultBatchConfigurer;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.batch.core.launch.support.SimpleJobLauncher;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
@Configuration
public class TaskExecutorBatchConfigurer extends DefaultBatchConfigurer {
@Bean
public ThreadPoolTaskScheduler batchTaskScheduler() {
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(10);
threadPoolTaskScheduler.afterPropertiesSet();
return threadPoolTaskScheduler;
}
@Override
protected JobLauncher createJobLauncher() throws Exception {
SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(super.getJobRepository());
jobLauncher.setTaskExecutor(batchTaskScheduler());
jobLauncher.afterPropertiesSet();
return jobLauncher;
}
}