gpt4 book ai didi

java - Spring批处理JobExecutionListener不起作用

转载 作者:行者123 更新时间:2023-12-01 17:53:49 24 4
gpt4 key购买 nike

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

关于java - Spring批处理JobExecutionListener不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60753557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com