POST для /jobs/executions не отвечает идентификатором выполнения?

Я интегрировал свое приложение с Spring XD через REST API. У меня есть определение задания, настроенное и развернутое для каждого источника данных (мой модуль связан с jdbc), а затем запускаю определенные задания, используя соответствующее определение задания в качестве шаблона с параметрами задания, предоставленными в запросе POST, содержащим критерии, уникальные для этого запуска задания.

Затем я ожидал, что мой REST-клиент сможет запрашивать метрики, связанные с заданием, он только что инициализировался, но для таких вызовов необходим jobExecutionId, и у клиента нет этого значения, только jobName, которое, конечно, не уникально.

Я ожидал, что POST на /jobs/executions ответит с помощью executeId, тот факт, что это не заставляет меня сомневаться в том, как я использую xd.

Может кто-нибудь пролить некоторый свет на это?


person justify    schedule 28.02.2015    source источник


Ответы (1)


Я согласен; это видимо упущение...

/**
 * Send the request to launch Job. Job has to be deployed first.
 *
 * @param name the name of the job
 * @param jobParameters the job parameters in JSON string
 */
@RequestMapping(value = "", method = RequestMethod.POST, params = "jobname")
@ResponseStatus(HttpStatus.CREATED)
public void launchJob(@RequestParam("jobname") String name, @RequestParam(required = false) String jobParameters) {
    ...
}

Я вижу проблему; нам нужно каким-то образом вернуть выполнение задания обратно в метод контроллера (сейчас нет результата от запроса на запуск).

Есть обходной путь...

Используйте кран выполнения задания, чтобы сбросить выполнение задания на какой-нибудь приемник; см. документацию по касанию события задания .

xd:>stream create --name jobex --definition "tap:job:myJob.job > file --name=exec --dir=/tmp" --deploy

Это запишет информацию jobExecution в /tmp/exec.out, которую вы можете отслеживать (вместо опроса REST API).

Если вы находитесь в распределенном режиме, вы можете сбросить данные в приемник Redis (или аналогичный).

Но согласен, лучше бы лаунч вернул id.

Откройте задачу JIRA.

person Gary Russell    schedule 28.02.2015
comment
На самом деле, просмотрев документацию, я до сих пор не понимаю, как отвод события предоставляет информацию jobExecution, относящуюся к экземпляру, только что созданному в запросе POST. Если имя задания ссылается на определение и есть 2 экземпляра с определенными параметрами задания, каждый из которых порождается другим клиентом, как каждый из них получает соответствующие метрики из приемника? - person justify; 03.03.2015
comment
Объект JobExecution, захваченный краном, содержит jobParameters, который можно использовать для корреляции; сбросить их в какое-то постоянное хранилище, которое вы можете запросить. Я согласен, что это не идеально; Я просто предложил обходной путь для текущей ситуации. Мы рассматриваем возможность предоставления правильного решения в рамках какой-либо другой работы; следите за этой проблемой, если хотите следить за прогрессом. - person Gary Russell; 03.03.2015
comment
stream create --name xmlexport1events --definition "tap:job:xmlexport1.job > jdbc --initializeDatabase=true" --deploy приводит к созданию таблицы xmlexport1events в базе данных xdjob, но записи не создаются из-за java.lang.ClassCastException: org.springframework.batch.core.JobExecution cannot be cast to java.lang.String - я думаю, это попытка вставить игровую нагрузку - person justify; 04.03.2015
comment
Да, если вы собираетесь сбрасывать его в БД, вам нужно будет выполнить некоторые преобразования. - person Gary Russell; 04.03.2015