NullPointerException при получении выполнения заданий из пользовательского интерфейса или API Spring Cloud Data Flow 1.1.2

У меня возникает проблема, когда я пытаюсь получить список выполнения заданий на вкладке «Задания» пользовательского интерфейса («Ошибка при получении данных. Работает ли сервер потока данных?») Или через REST API (500 NullPointerException).

Ошибка из журнала

java.lang.NullPointerException: null
at org.springframework.cloud.dataflow.server.service.impl.DefaultTaskJobService.getTaskJobExecution(DefaultTaskJobService.java:231) ~[spring-cloud-dataflow-server-core-1.1.2.RELEASE.jar!/:1.1.2.RELEASE]

что, похоже, вызвано кодом:

taskExplorer.getTaskExecutionIdByJobExecutionId(jobExecution.getId())

Глядя на это, кажется, что некоторые из моих заданий не были связаны с идентификаторами задач, то есть в таблице task_task_batch нет записи, и если я попытаюсь получить одно из этих заданий или список всех заданий, я получаю исключение NullPointerException.

Получить задание напрямую по идентификатору, имеющему связь в таблице task_task_batch, можно.

Изучение того, почему это происходит с некоторыми из моих рабочих задач, похоже, связано с тем, что некоторые из них используют XML вместо Java Config для настройки заданий (у нас есть некоторые уже существующие сложные задания, которые мы перемещаем из XD в Spring Cloud Data Flow и сохранение XML - самый быстрый способ изначально сделать это).

В противном случае эти задания выполняются нормально, а выполнение заданий / шагов регистрируется в БД.

При использовании XML кажется, что taskBatchExecutionListener не добавляется к заданию автоматически, и поэтому ассоциация задача / пакет не регистрируется.

Код для этого находится в TaskBatchExecutionListenerBeanPostProcessor, и это может быть связано с тем, что при использовании конфигурации XML компонент задания имеет тип JobParserJobFactoryBean, а не AbstractJob.

Если я добавлю слушателя вручную, т.е.

<listeners>
   <listener ref="taskBatchExecutionListener"/>
</listeners>

в задании xml проблема исправлена.

У меня есть несколько вопросов:

1) Является ли это ошибкой в ​​Spring Cloud Task - т.е. он просто неправильно обрабатывает конфигурацию XML, если это так, я могу поднять проблему для этого.

2) Должен ли Spring Cloud Dataflow справиться с этим лучше? Кажется, что плохо выполненная задача может эффективно повредить данные и остановить поиск списков, содержащих «хорошие» задания.


person David Geary    schedule 09.03.2017    source источник


Ответы (2)


У меня была такая же проблема, и в моем случае проблема была решена добавлением @EnableTask в конфигурацию задания

person Bernhard Ruch    schedule 24.08.2017

Я помню, как получал эту ошибку, но в моем случае я попытался удалить выполнение задачи через API-интерфейс сервера облачного потока данных Spring (см. https://docs.spring.io/spring-cloud-dataflow/docs/current-SNAPSHOT/reference/htmlsingle/#api-guide-resources-task-executions-delete).

Когда я заметил, что это на самом деле удаление NO-OP (оно ничего не делает и было подтверждено разработчиками https://github.com/spring-cloud/spring-cloud-dataflow/issues/1844), я попытался вручную удалить записи из базы данных и пропустил некоторые записи.

Есть некоторые зависимости FK, и моя очистка не была тщательной. Как только я начал (создал новую схему БД и все такое), проблема исчезла.

person AnnaSarteNicotera    schedule 04.01.2018