Spring batch JobExecutionListener не работает - PullRequest
0 голосов
/ 19 марта 2020

У меня есть пакетное задание Spring, которое работает правильно; Я добавил прослушиватель задания, чтобы изменить состояние выхода приложения, но задание никогда не идет внутри слушателя (beforeJob и afterJob никогда не вызываются). Это часть моего кода:

@Bean(name = "myJob")
public Job myJob(@Qualifier("initStep") Step initStep,
        @Qualifier("firstStep") Step firstStep,
        @Qualifier("onSuccessStep") Step onSuccessStep) {

    return jobBuilderFactory.get("myJob")
            .listener(new JobExecutionListener() {
                @Override
                public void beforeJob(JobExecution jobExecution) {

                }

                @Override
                public void afterJob(JobExecution jobExecution) {
                    ExitStatus exitStatus = jobExecution.getExitStatus() ;

                    if(exitStatus != ExitStatus.COMPLETED ){
                        System.exit(1);
                    }
                }
            })
            .start(initStep)
            .next(firstStep)
            .next(onSuccessStep)
            .build();
}

Работа начинается и заканчивается правильно, но она никогда не идет внутри слушателя; Любое предложение?

1 Ответ

0 голосов
/ 27 марта 2020

Код общего доступа работает для меня. Но вы можете попробовать альтернативные реализации, как показано ниже, чтобы проверить, работает ли это для вас,

Фрагмент, чтобы показать пример конфигурации задания со слушателем,

Job job = jobBuilderFactory.get("jobName").incrementer(new RunIdIncrementer())
    .start(step1()).next(step2()).next(step3()).next(step4).end()
    .listener(jobCompletionListener()).build();

@Bean
public JobCompletionListener jobCompletionListener() {
    return new JobCompletionListener();
}

Фрагмент реализации JobCompletionListener,

public class JobCompletionListener extends JobExecutionListenerSupport {

private static final Logger logger = LoggerFactory.getLogger(JobCompletionListener.class);

   @Override
   public void afterJob(JobExecution jobExecution) {
       if (jobExecution.getStatus() == BatchStatus.COMPLETED) {
           logger.info("Job execution completed successfully");
       } else {
           logger.error("Job Execution Failed");
       }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...