Можно ли возобновить работу после остановки? - PullRequest
0 голосов
/ 14 января 2019

Я работаю над проектом, в котором я могу использовать максимум 15 000 обращений в день к Google API. Поэтому я хочу прекратить работу после 15k и возобновить ее на следующий день. Пожалуйста, дайте мне знать, как я могу сделать то же самое.

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

Если кому-то нужно полное объяснение, я могу объяснить это подробнее.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Вы можете остановить выполнение шага (и окружающее его задание), используя StepExecution#setTerminateOnly. Так что в вашем случае вы можете использовать, например, ItemReadListener#afterRead или ItemWriteListener#afterWrite, который имеет доступ к выполнению шага, и установить флаг terminateOnly после обработки 15 тыс. Элементов. Когда вы так аккуратно остановите задание, его статус будет STOPPED, и вы сможете перезапустить его на следующий день, как вы упомянули.

Пример можно найти в разделе Остановка работы вручную по бизнес-причинам справочной документации.

Надеюсь, это поможет.

0 голосов
/ 14 января 2019

У меня было нечто похожее, когда мне нужно было остановить работу в режиме 24/7 за 5 минут до начала обслуживания сервера.

Я обнаружил, что проще всего использовать Reader и вернуть null, чтобы указать, что задание должно быть остановлено. В вашем случае верните null, когда были обработаны запросы API 15k.

Это, вероятно, будет означать, что вам понадобится компонент (может быть просто AtomicInteger), доступный для Reader и обновленный процессором. Но также и Job Listener (извините, у меня нет кода), который также знает о бине. Если достигнуто максимальное значение, Слушатель устанавливает настраиваемое значение завершения работы , которое будет возвращено планировщику после его завершения. Планировщик должен быть достаточно настраиваемым, чтобы знать конкретное значение выхода, чтобы снова начать работу на следующий день. (Любое другое ненулевое значение считалось ошибкой.)

Это означает, что существует небольшая вероятность того, что задание достигнет 15 тыс., Но также и то, что это последний элемент, поэтому задание снова запланировано на следующий день, даже если обрабатывать больше нечего. Это не должно иметь значения - задание начнется на следующий день и немедленно остановится с нормальным завершенным состоянием, чтобы планировщик не планировал снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...