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