У меня возникает проблема, когда я пытаюсь получить список выполнения заданий на вкладке «Задания» пользовательского интерфейса («Ошибка при получении данных. Работает ли сервер потока данных?») Или через 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 справиться с этим лучше? Кажется, что плохо выполненная задача может эффективно повредить данные и остановить поиск списков, содержащих «хорошие» задания.