首页 > 解决方案 > spring batch 提供作业执行状态和步骤信息

问题描述

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

在这一点上,我没有办法得到Job_Execution_Id运行的工作。

获取它的方法是如果我查询BATCH_JOB_EXECUTION_PARAM具有correlationIdas 键/值的表,所以我用条件查询:

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

我知道dao春季批次中有一些课程用于jobexectionstepexecution。我想知道的是,是否有一种方法可以通过自定义查询或弹簧批处理框架中已经存在的 dao 方法一次性获取作业执行和当前步骤执行的详细信息并插入我的响应? 所有这一切都来自我的客户在端点中调用的一个简单的correlationId GET /status/{correlationId}

这个链接给了我一些知识,但是正在查询我的客户没有的作业执行 ID,而且也没有任何关于currentStep它的状态

我不是通过作业执行 ID 来驱动这一切,因为我的作业可以异步触发,我需要立即使用相关 ID 做出响应。

标签: javaspringspring-batch

解决方案


我相信你不需要那个correlationId。如果您在作业启动器上设置异步任务执行器,作业启动器将立即返回一个带有 id 的 jobExecution,您可以将其返回给客户端,请参阅从 Web 容器中运行作业

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


推荐阅读