java - spring batch 提供作业执行状态和步骤信息
问题描述
我有一个应用程序,客户端发送 HTTP 请求,这些请求被翻译成 Spring 批处理作业参数并触发作业。我correlationId
为响应以及作业执行的结果生成一个。
在这一点上,我没有办法得到Job_Execution_Id
运行的工作。
获取它的方法是如果我查询BATCH_JOB_EXECUTION_PARAM
具有correlationId
as 键/值的表,所以我用条件查询:
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
。我想知道的是,是否有一种方法可以通过自定义查询或弹簧批处理框架中已经存在的 dao 方法一次性获取作业执行和当前步骤执行的详细信息并插入我的响应? 所有这一切都来自我的客户在端点中调用的一个简单的correlationId GET /status/{correlationId}
这个链接给了我一些知识,但是正在查询我的客户没有的作业执行 ID,而且也没有任何关于currentStep
它的状态
我不是通过作业执行 ID 来驱动这一切,因为我的作业可以异步触发,我需要立即使用相关 ID 做出响应。
解决方案
我相信你不需要那个correlationId
。如果您在作业启动器上设置异步任务执行器,作业启动器将立即返回一个带有 id 的 jobExecution,您可以将其返回给客户端,请参阅从 Web 容器中运行作业。
现在有了从 获取的作业执行 ID GET /status/{jobExecutionId}
,您可以使用 aJobExplorer#getJobExecution
获取JobExecution
及其步骤执行(使用JobExecution#getStepExecutions()
, 并找出当前正在使用 运行的步骤stepExecution.getStatus().isRunning()
。这样,您应该能够返回您的响应。
推荐阅读
- flutter - 如何像这个例子一样在颤动中变换一个矩形?
- ruby - 在 yml 文件中获取 Rails ENV 变量的问题,它给出浮点数而不是整个字符串
- html - 在 Word VBA 中查找包含交叉引用的字符串
- sql-server - 从 OLE DB 源加载表并替换重复的唯一值
- html - 可访问性:使用媒体查询隐藏文本
- vue.js - 当 pause 方法使 stop 不暂停时 howler.js
- sql - 在 PostgreSQL 中使用 LEFT JOIN 而不是 NOT IN
- javascript - 为什么我的 JS 正则表达式匹配的比它应该匹配的多?
- jquery - 引导程序和 ASP.NET
- php - Laravel - 致命错误:尚未应用特征方法订阅