Выполнение задания должно быть уже создано при вызове вашего декорированного запуска. Вопрос в том, как получить к нему доступ на данный момент? Я не уверен, что это будет легко, если только вы не сможете проанализировать конечную переменную в методе экземпляра анонимного внутреннего класса (исполняемый файл, созданный Spring Batch), обернутого в экземпляр анонимного внутреннего класса ( ваш декоратор): -)
Я хочу регистрировать такие вещи, как jobName и executeId, для любой работы, которая может выполняться.
Возможно, вам не нужен декоратор задач. То, что вы можете сделать, это подкласс SimpleJobLauncher
и переопределить run
, что-то вроде:
@Bean(name = "AsyncMccJobLauncher")
public JobLauncher simpleJobLauncher(JobRepository jobRepository) {
SimpleJobLauncher jobLauncher = new SimpleJobLauncher() {
@Override
public JobExecution run(Job job, JobParameters jobParameters) throws JobExecutionAlreadyRunningException, JobRestartException, JobInstanceAlreadyCompleteException, JobParametersInvalidException {
JobExecution jobExecution = super.run(job, jobParameters);
// jobExecution is created and accessible here
//MDC.put("execId", String.valueOf(jobExecution.getJobId()));
//MDC.put("jobName", jobExecution.getJobInstance().getJobName());
return jobExecution;
}
};
jobLauncher.setJobRepository(jobRepository);
SimpleAsyncTaskExecutor taskExecutor = new SimpleAsyncTaskExecutor();
jobLauncher.setTaskExecutor(taskExecutor);
return jobLauncher;
}