Spring 批处理 JobExecutionListener 不工作

Spring batch JobExecutionListener doesn't work

我有一个可以正常工作的 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();
}

作业正确开始和结束,但它永远不会进入侦听器;有什么建议吗?

共享的代码对我有用。但是您可以尝试像下面这样的替代实现来检查它是否适合您,

显示带有侦听器的示例作业配置的代码段,

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");
       }
   }
}