如何赶上两个 Spring Batch 作业完成?

问题描述 投票:0回答:0

我有两个 Spring Batch 作业。让我们假设两个工作被称为

AJob
BJob
。我想在这两个作业执行成功后做点什么。我试图在两个工作的
afterJob
方法中发布kafka消息,消费者检查两个工作的退出状态并执行主要业务逻辑。

然而,主要业务逻辑代码似乎并不总是有效。我在另一篇文章中找到了评论。

JobExecutionListener.afterJob() 一旦作业在内存中完成但存储库尚未针对最终作业状态进行更新。

在这种情况下,最佳做法是什么?我想确保两个作业完全执行,然后做主要的业务逻辑。

@Configuration
class AJobConfiguration() {
  @Bean
  @JobScope
  fun jobExecutionListener(): JobExecutionListener {
    return object : JobExecutionListenerSupport() {
      override fun afterJob(jobExecution: JobExecution) {
        // publish kafka message
      }
    }
  }
}
@Configuration
class BJobConfiguration() {
  @Bean
  @JobScope
  fun jobExecutionListener(): JobExecutionListener {
    return object : JobExecutionListenerSupport() {
      override fun afterJob(jobExecution: JobExecution) {
        // publish kafka message
      }
    }
  }
}

// consumer
@KafkaListener()
fun finishJobs() {
  val isAFinished = jobExplorer.getLastJobExecution(JobAInstance).exitStatus.exitCode == ExitStatus.COMPLETED.exitCode
  val isBFinished = jobExplorer.getLastJobExecution(JobBInstance).exitStatus.exitCode == ExitStatus.COMPLETED.exitCode
  if (isAFinished && isBFinished) {
    // do something <- This doesn't works sometimes.
  }
}
spring kotlin apache-kafka spring-batch batch-processing
© www.soinside.com 2019 - 2024. All rights reserved.