当前位置: 首页 > 知识库问答 >
问题:

spring batch提供作业执行状态和步骤信息

齐志勇
2023-03-14

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

此时,我无法获得正在运行的作业的job_execution_id

获取它的方法是查询batch_job_execution_param表,该表以correlationID作为键/值,因此我使用条件进行查询:

从这里开始,我希望向客户提供正在运行/或正在运行的作业的全部详细信息,包括当前步骤及其状态的详细信息。所以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"
    }
  }
}

我知道spring batch中有一些DAO类用于JobExectionStepExecution。我想知道的是,是否有一种方法可以通过自定义查询或已经存在于spring batch框架中的dao方法一次性获取作业执行和当前步骤执行的细节,并插入到响应中?所有这些都来自一个简单的correlationId,客户端在endpointGET/status/{correlationId}中调用该ID

这个链接给了我一些知识,但是我正在用我的客户机没有的作业执行id查询,而且也没有关于currentstep及其状态的信息

我不是通过作业执行id来驱动所有这些,因为我的作业可以异步激发,我需要立即用CorrelationID来响应。

共有1个答案

太叔景同
2023-03-14

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

现在,使用从get/status/{jobExecutionId}获得的作业执行Id,您可以使用jobexplorer#getjobexecution获取jobexecution及其步骤执行(使用jobexecution#getstepexecution(),并通过stepexecution.getstatus().isrunning()查找当前正在运行的步骤。

 类似资料:
  • 我最近使用。我对DB表进行了必要的更改,并对一些与参数API相关的微小代码进行了更改。 现在,当我运行应用程序时,它正在工作,但是如果一个步骤的退出状态为失败,则作业的存在状态设置为完成。这会导致一些问题,因为我们的应用程序代码将其视为成功执行。我通过在中添加一个代码片段来解决这个问题,在这里我检查列表并手动设置作业退出状态,但是Spring批处理框架不应该处理退出状态吗?

  • 问题内容: 如果构建失败,我需要运行某些shell命令。是否有任何传递给shell的变量包含此类信息?或者也许我可以在文件中找到它? 我需要这样的东西: 我已经打印过了,没有什么可以直接说构建失败了。 问题答案: 您正在寻找条件构建步骤插件。添加“条件步骤(单个)”作为最后的构建步骤,并使用“当前构建状态”作为条件。我喜欢这个插件,但是还没有使用这个特殊条件。

  • 我使用的是SpringBatch 3.0。3并且需要一些关于不序列化作业执行上下文和步骤执行上下文的说明,因为我们有大型对象集,不希望将它们持久化到spring批处理表中。我们是否可以只存储短上下文而不是序列化对象?

  • 什么是最简单的方法来简单地获取一组特定的作业,然后从该作业中获取过去发生的作业/步骤的步骤数据?我所说的“过去”是指,也许我会在Spring Batch应用程序中创建一个HTTPendpoint,用户可以在其中发布文件名,然后在实际作业/步骤完成后的几分钟/几小时/几天内返回相应作业/步骤的所有元数据。 我是不是太复杂了?有更简单的方法吗? 理想情况下,我的“报告”类似于下面的内容,如果它是通过我

  • 我使用的是spring batch 3.0.2和quartz 2.2.1。两者都使用由两个API提供的元表。Spring批处理作业由quartz调度,并在调度时间调用。Quartz和Spring批处理表中都有所有信息。 现在我想要得到工作运行状态,这是由石英时间表。我不知道,我怎么能把石英作业键和Spring批联系起来。这样我就可以找到quartz系统调度的spring批处理作业的运行状态。

  • 关于这一高级话题,请先阅读提供者状态一节的介绍。 当按照以下形式来阅读时,提供者状态中的文本应该具有足够的可读性(自动生成的文档是按这样的形式展示的): Given an alligator with the name Mary exists * Upon receiving a request to retrieve an alligator by name ** from Some Consu