春季批处理提供作业执行的状态和步骤信息

时间:2020-08-03 15:10:55

标签: java spring spring-batch

我有一个应用程序,客户端发送HTTP请求,这些请求被转换为Spring批处理作业参数并触发作业。我为响应生成了correlationId以及工作执行的结果。

目前,我无法获得正在运行的作业的Job_Execution_Id

获取它的方法是:如果我查询以BATCH_JOB_EXECUTION_PARAM作为键/值的correlationId表,那么我使用条件查询:

where KEY_NAME='correlationId' AND STRING_VAL='12345'

这给了我JOB_EXECUTION_ID

在这里,我想为我的客户提供正在运行或正在运行的作业的完整详细信息,包括当前步骤及其状态的详细信息。因此json有效负载应如下所示:

{
  "correlationId": "2ae16a63-7e91-4e37-942a-cf7f66117014",
  "jobDetails": {
    "id": 1,
    "jobId": 1,
    "jobName": "BLA BLA",
    "startTime": "2018-12-23T18:19:13.185",
    "endTime": "2018-12-23T18:19:13.223",
    "exitCode": "COMPLETED",
    "exitDescription": "",
    "status": "COMPLETED",
    "exceptions": [],
    "currentStep": "copyingAFile",
    "currentStepStatus": "RUNNING"
  },
  "_links": {
    "self": {
      "href": "http://localhost:8080/status/2ae16a63-7e91-4e37-942a-cf7f66117014"
    }
  }
}

我知道春季批处理中有daojobexection的一些stepexecution类。我想知道的是,是否有一种方法可以通过Spring Batch框架中已经存在的自定义查询或dao方法在一次命中中获取作业执行和当前步骤执行的详细信息,并插入到我的响应中?所有这些都来自我的客户端在端点 GET /status/{correlationId}

中调用的简单的correlationId

这个link给了我一些知识,但是正在使用我的客户没有的工作执行ID进行查询,关于currentStep及其状态也没有任何提示

我不是通过作业执行ID来驱动所有这一切,因为我的作业可以异步触发,因此我需要立即使用correlationIdId进行响应。

1 个答案:

答案 0 :(得分:0)

我相信您不需要correlationId。如果您在工作启动器上设置了异步任务执行器,则工作启动器将立即返回具有您可以返回给客户端的ID的jobExecution,请参见Running Jobs from within a Web Container

现在有了从GET /status/{jobExecutionId}获得的工作执行ID,您可以使用JobExplorer#getJobExecution来获取JobExecution及其步骤执行(使用JobExecution#getStepExecutions()并找出来stepExecution.getStatus().isRunning()当前正在执行哪个步骤。这样,您应该可以返回响应。