我有一个应用程序,客户端发送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"
}
}
}
我知道春季批处理中有dao
和jobexection
的一些stepexecution
类。我想知道的是,是否有一种方法可以通过Spring Batch框架中已经存在的自定义查询或dao方法在一次命中中获取作业执行和当前步骤执行的详细信息,并插入到我的响应中?所有这些都来自我的客户端在端点 GET /status/{correlationId}
这个link给了我一些知识,但是正在使用我的客户没有的工作执行ID进行查询,关于currentStep
及其状态也没有任何提示
我不是通过作业执行ID来驱动所有这一切,因为我的作业可以异步触发,因此我需要立即使用correlationIdId进行响应。
答案 0 :(得分:0)
我相信您不需要correlationId
。如果您在工作启动器上设置了异步任务执行器,则工作启动器将立即返回具有您可以返回给客户端的ID的jobExecution,请参见Running Jobs from within a Web Container。
现在有了从GET /status/{jobExecutionId}
获得的工作执行ID,您可以使用JobExplorer#getJobExecution
来获取JobExecution
及其步骤执行(使用JobExecution#getStepExecutions()
并找出来stepExecution.getStatus().isRunning()
当前正在执行哪个步骤。这样,您应该可以返回响应。