Я использую Spring Batch с загрузкой Spring.
У меня есть два задания, которые я выполняю, используя приведенные ниже:
private static final Logger LOGGER = LoggerFactory.getLogger(TimeWorkedJobLauncher.class);
private final Job job;
//private final Job jobDS;
private final JobLauncher jobLauncher;
@Autowired
private ResourceLoader resourceLoader;
@Autowired
TimeWorkedJobLauncher(@Qualifier("timeworkedJob") Job job, JobLauncher jobLauncher) {
System.out.println("Inside TimeWorkedJobLauncher");
this.job = job;
this.jobLauncher = jobLauncher;
//this.jobDS = jobDS;
}
@Async
@Scheduled(cron = "${reports.timeWorked.job.cron}")
public void execute() throws JobParametersInvalidException, JobExecutionAlreadyRunningException,
JobRestartException, JobInstanceAlreadyCompleteException {
LOGGER.info("Starting TimeWorked job");
JobParametersBuilder builder = new JobParametersBuilder();
builder.addDate("date", new Date());
builder.addLong("time",System.currentTimeMillis());
builder.addString(LoaderConstants.JOB_PARAMETER, resourceLoader.getTimeWorkedFileLoc());
jobLauncher.run(job, builder.toJobParameters());
LOGGER.info("Stopping TimeWorked job");
}
@Async
@Scheduled(cron = "${reports.timeWorked.job.cronds}")
public void executeDSJob() throws JobParametersInvalidException, JobExecutionAlreadyRunningException,
JobRestartException, JobInstanceAlreadyCompleteException {
JobParametersBuilder builder = new JobParametersBuilder();
builder.addDate("date", new Date());
builder.addLong("time",System.currentTimeMillis());
builder.addString(LoaderConstants.JOB_PARAMETER, resourceLoader.getTimeWorkedFileLocForDS());
jobLauncher.run(job, builder.toJobParameters());
LOGGER.info("Stopping TimeWorked job for DS");
}
Единственное отличие состоит в том, что при запуске executeDSJob ()Мне нужно, чтобы задание выполнялось различными методами beforeStep () и afterStep (), которые выполняются, когда я запускаю задание с использованием execute ().
У меня настроены два класса конфигурации, единственное отличие состоит в том, что один класс возвращает
@Bean
public StepExecutionListener timeworkedCountProcessor() {
return new TimeWorkedProcessorDS();
}
и другие возвращаемые значения
@Bean
public StepExecutionListener timeworkedCountProcessor() {
return new TimeWorkedProcessor();
}
Но когда я запускаю метод execute (), используется TimeWorkedProcessorDS (), а afterStep () и beforeStep () этого классаиспользуется.
Как я могу это сделать?