Java 如何创建主作业来处理多个spring批处理作业?
我们有多个Java 如何创建主作业来处理多个spring批处理作业?,java,spring,spring-batch,Java,Spring,Spring Batch,我们有多个spring批处理作业。但每个作业都需要单独启动 有没有办法在spring中创建一个主作业或任何负责执行所有其他批处理作业的控制器?因此,我们只需要执行主作业,其他所有作业都会自动启动。我刚才解释了如何在单独的上下文中加载所有作业的情况下启动spring应用程序。我们有重新启动作业,每10分钟计划一次,它会检查最新的失败执行,并尝试再重新启动几次 您的用例基本相同,您可以使用自己的配置文件在不同的上下文中定义所有作业,在配置中,您可以通过设置spring.batch.job.enabl
spring批处理作业
。但每个作业都需要单独启动
有没有办法在spring中创建一个主作业
或任何负责执行所有其他批处理作业的控制器
?因此,我们只需要执行主作业,其他所有作业都会自动启动。我刚才解释了如何在单独的上下文中加载所有作业的情况下启动spring应用程序。我们有重新启动作业,每10分钟计划一次,它会检查最新的失败执行,并尝试再重新启动几次
您的用例基本相同,您可以使用自己的配置文件在不同的上下文中定义所有作业,在配置中,您可以通过设置spring.batch.job.enabled:false告诉spring batch不要在启动时运行它们,您可以编写自己的启动器,它使用JobExplorer
为您启动作业,您可以安排它或其他操作
比如:
@Component
@EnableScheduling
public class AllJobLauncher {
@Autowired
JobExplorer jobExplorer;
@Autowired
private JobLauncher jobLauncher;
@Autowired
private JobRegistry jobRegistry;
@Scheduled(cron = "${some.cron:0 0/10 * * * ?}")
public void launchAllJobs() throws JobExecutionException {
final List<String> jobNames = jobExplorer.getJobNames();
for (final String jobName : jobNames) {
final Job job = jobRegistry.getJob(getJobName(organizationId));
final JobParameters jobParameters = new JobParametersBuilder() //build parameters
jobLauncher.run(job, jobParameters);
}
}
感谢您的解释,还有一点,我们能为多个作业提供通用的JobLauncher和JobRepository吗?如果您正在查看我在其他问题上发布的配置,我在这里发布的JobLauncher
代码的这部分在JobContextConfig
类中,因此,我们只使用了JobRepository
和JobLauncher
@Bean
public JobLauncher jobLauncher() {
final SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(jobRepository);
final SimpleAsyncTaskExecutor simpleAsyncTaskExecutor = new SimpleAsyncTaskExecutor();
jobLauncher.setTaskExecutor(simpleAsyncTaskExecutor);
return jobLauncher;
}