我们有多个spring batch job,但是每个都需要单独启动。有什么方法可以在春季创建Master Job或any controller来执行所有其他批处理作业?这样我们只需要执行主作业,其他所有作业就会自动启动。 最佳答案 我刚刚在this question上解释了如何在单独的上下文中加载所有作业的情况下启动spring应用程序。我们有重新启动作业,该作业每10分钟安排一次,它检查最近执行失败的情况,并尝试重新启动几次。您的用例几乎相同,您可以使用自己的配置文件在单独的上下文中定义所有作业,在config中,您可以通过设置spring.batch.job.enabled: false告诉spring batch不要在启动时运行它们,并且您可以编写自己的启动器,该启动器使用为您开始工作,您可以安排工作或其他时间。就像是:@Component@EnableSchedulingpublic 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); } }请注意,春季批处理中的JobExplorer默认情况下是同步的,因此启动器将等待直到作业完成。如果要异步启动作业,则必须将此配置放在以下位置:@Beanpublic JobLauncher jobLauncher() { final SimpleJobLauncher jobLauncher = new SimpleJobLauncher(); jobLauncher.setJobRepository(jobRepository); final SimpleAsyncTaskExecutor simpleAsyncTaskExecutor = new SimpleAsyncTaskExecutor(); jobLauncher.setTaskExecutor(simpleAsyncTaskExecutor); return jobLauncher; }
07-26 08:35