Мы создали задание Spring Batch, которое будет выполняться в Spring Cloud Data Flow через Spring Cloud Task (простая задача, она только выполняет задание). Выполнение было проверено как с пользовательским интерфейсом, так и с REST API, и в идеальном случае все в порядке. Проблема возникает, когда мы пытаемся остановить и перезапустить задание. Следуя руководству по REST API:
- Запустите задачу: https://docs.spring.io/spring-cloud-dataflow/docs/current/reference/htmlsingle/#api-guide-resources-task-executions-launching
- Получите информацию о выполнении задачи, используя идентификатор выполнения задачи, возвращенный в предыдущем пункте: https://docs.spring.io/spring-cloud-dataflow/docs/current/reference/htmlsingle/#api-guide-resources-task-executions-detail
- Вот первая проблема: если мы остановим задачу с идентификатором выполнения задачи (https://docs.spring.io/spring-cloud-dataflow/docs/current/reference/htmlsingle/#api-guide-resources-task-executions-stoppping) задание, связанное с задачей, останавливает свое выполнение (в журналах), но в базе данных задание остается как «НАЧАЛОСЬ». И тогда невозможно перезапустить выполнение задания, так как оно никогда не достигает статуса "ОСТАНОВЛЕН" -> Для гуру SCDF ... это не ошибка или есть техническая причина?
- Если мы хотим остановить задание, необходимо получить первый параметр jobExecutionIds из ответа точки 2 и сделать запрос с идентификатором выполнения задания (https://docs.spring.io/spring-cloud-dataflow/docs/current/reference/htmlsingle/#api-guide-resources-job-executions-stop).
- Ожидая подходящего времени для завершения выполнения текущего шага, задание переходит в состояние «ОСТАНОВЛЕНА». Если сейчас мы перезапустим задание (https://docs.spring.io/spring-cloud-dataflow/docs/current/reference/htmlsingle/#api-guide-resources-job-executions-restart) новую задачу создается выполнение, связанное с выполнением нового задания, и оно завершает обработку.
А теперь вопрос на миллион долларов: если мы хотим интегрировать SCDF с планировщиком (например, Control-M), как мы можем делать запросы на опрос для проверки статуса выполнения после перезапуска, если запрос перезапуска не возвращает идентификатор выполнения? Если есть просто нормальное выполнение, мы можем отправлять запросы на опрос с идентификатором выполнения задания (шаг 4), связанным с идентификатором выполнения задачи (шаг 2), но после перезапуска мы «слепые»