Весенний пакет обеспечивает статус выполнения задания и информацию о шаге - PullRequest
0 голосов
/ 03 августа 2020

У меня есть приложение, в котором клиенты отправляют 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"
    }
  }
}

Я знаю, что в пакете Spring есть классы dao для jobexection и stepexecution. Что я хотел бы знать, так это то, есть ли способ получить подробную информацию о выполнении задания и выполнении текущего шага за один удар с помощью настраиваемого запроса или метода dao, который уже существует в структуре пакетной обработки Spring, и подключить к моему ответу ? Все это с помощью простого correlationId, который мой клиент вызывает в конечной точке GET /status/{correlationId}

Эта ссылка дала мне некоторые знания, но запрашивает идентификатор выполнения задания, которого у моего клиента не будет и также нет ничего о currentStep, а его статус

Я не управляю всем этим по идентификатору выполнения задания, потому что мои задания могут запускаться асинхронно, на что мне нужно немедленно ответить с помощью correlationId.

1 Ответ

0 голосов
/ 14 августа 2020

Думаю, тебе это не нужно correlationId. Если вы установите асинхронный исполнитель задач в средстве запуска заданий, средство запуска задания вернет немедленно jobExecution с идентификатором, который вы можете вернуть клиенту, см. Запуск заданий из веб-контейнера .

Теперь с идентификатором выполнения задания, который вы получаете из GET /status/{jobExecutionId}, вы можете использовать JobExplorer#getJobExecution, чтобы получить JobExecution и его выполнение шагов (используя JobExecution#getStepExecutions(), и узнать, какой шаг в настоящее время работает с stepExecution.getStatus().isRunning(). После этого вы сможете вернуть свой ответ.

...