Как я могу запустить выполнение партии пружины от vuejs - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь запустить выполнение пружинного пакета из конечной точки. Я реализовал сервис на бэкэнде. Поэтому с Vue я пытаюсь позвонить на эту конечную точку.

async trigger(data) {
    let response = await Axios.post('')
    console.log(response.data.message)
}

Моя служба на бэкэнде возвращает ответ «Пакетная обработка запущена» и выполняет выполнение в фоновом режиме, поскольку она асинхронная c, но не возвращается обратно после выполнения задания (я вижу статус только в приставка). В таком случае, как я могу ждать звонка от vue для завершения выполнения услуги. Я понимаю, что служба не отправляет ответ после завершения / сбоя выполнения. Любые изменения, которые мне нужно внести в бэкэнд или внешний интерфейс, чтобы поддержать это. Пожалуйста, дайте мне знать ваши мысли.

Ответы [ 3 ]

0 голосов
/ 02 апреля 2020

как я могу ждать звонка с vue для завершения выполнения службы

Я бы не советовал, так как работа может занять слишком много времени, а вы не хотите, чтобы ваш веб-клиент ждал так долго, чтобы получить ответ. При настройке с асинхронным исполнителем задач средство запуска заданий немедленно возвращает выполнение задания с идентификатором, который вы можете проверить позже.

Пожалуйста, проверьте Выполнение заданий из веб-контейнера для получения дополнительной информации. подробности и примеры кода.

0 голосов
/ 03 апреля 2020

Мое предложение заключается в том, что вы должны сделать внешний запрос о статусе задания, а не ждать его завершения и ответить, потому что задание может занять очень много времени.

Ваш API для запуска начало работы должно вернуть идентификатор работы, вы можете получить идентификатор работы в объекте JobExecution. Этот объект возвращается при вызове JobLauncher.run.

. Затем вы реализуете API-интерфейс Query в своем бэкэнде, чтобы получить статус задания по идентификатору задания. Вы можете реализовать это с помощью Spring JobExplorer.

. Затем ваш интерфейс может вызвать этот API запросов, чтобы получить статус задания. Вы должны делать это с интервалом (например, 30 секунд, 5 минут, .et c в зависимости от вашей работы). Это предотвратит застревание вашего приложения в ожидании ошибок задания и тайм-аута.

0 голосов
/ 01 апреля 2020

Как вы сказали, бэкэнд-сервис асинхронный, что означает, что после выполнения кода он переходит на следующую строку. Если следующая строка не закрывается, функция существует, сценарий закрывается, и сервер отправляет пустой ответ обратно во внешний интерфейс.

Возможны следующие варианты:

  1. Реализация веб-сокета, который транслирует вернитесь, когда служба будет завершена, и используйте ее вместо этого.
  2. Используйте функцию тайм-аута для отслеживания изменения флага в службе, который указывает, что служба выполнила свои обязанности, или
  3. Don не используете асинхронный сервис
...