Существует @Aspect
, который гарантирует, что задания при весенней загрузке не будут повторными.Он реализован в JobLauncherSynchronizer.java и задокументирован здесь .Он находится в административном артефакте весенней партии.
Моя работа создается через @Bean
следующим образом:
@Bean
@Qualifier("synchronisationLauncher")
public JobLauncher synchronisationLauncher() throws Exception {
SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(jobRepository);
jobLauncher.setTaskExecutor(new SimpleAsyncTaskExecutor());
jobLauncher.afterPropertiesSet();
return jobLauncher;
}
Мой вопрос:
как мне интегрировать@Aspect
в мой JobLauncher?
Я наивно пытался обновить его и установить свойства описанным выше способом, не удивительно, что это не сработало очень хорошо.Мне удалось запустить несколько экземпляров.
Мой код запуска:
// dependencies from constructor.
// the launcher is qualified to 'synchronisationLauncher'
private JobLauncher launcher;
private Job mergeJob;
private JobQueryHelper jobQueryHelper;
@PostMapping("uri")
public ResponseEntity<APIResponse> SynchroniseRetailers()
throws JobParametersInvalidException,
JobExecutionAlreadyRunningException,
JobRestartException,
JobInstanceAlreadyCompleteException {
JobParametersBuilder builder = new JobParametersBuilder()
.addLong("run.id", jobQueryHelper.findLastBatchExecutionIndex() + 1);
launcher.run(mergeJob, builder.toJobParameters());
return buildEmptyResponse();
}