У меня было нечто похожее, когда мне нужно было остановить работу в режиме 24/7 за 5 минут до начала обслуживания сервера.
Я обнаружил, что проще всего использовать Reader и вернуть null, чтобы указать, что задание должно быть остановлено. В вашем случае верните null, когда были обработаны запросы API 15k.
Это, вероятно, будет означать, что вам понадобится компонент (может быть просто AtomicInteger
), доступный для Reader и обновленный процессором. Но также и Job Listener (извините, у меня нет кода), который также знает о бине. Если достигнуто максимальное значение, Слушатель устанавливает настраиваемое значение завершения работы , которое будет возвращено планировщику после его завершения. Планировщик должен быть достаточно настраиваемым, чтобы знать конкретное значение выхода, чтобы снова начать работу на следующий день. (Любое другое ненулевое значение считалось ошибкой.)
Это означает, что существует небольшая вероятность того, что задание достигнет 15 тыс., Но также и то, что это последний элемент, поэтому задание снова запланировано на следующий день, даже если обрабатывать больше нечего. Это не должно иметь значения - задание начнется на следующий день и немедленно остановится с нормальным завершенным состоянием, чтобы планировщик не планировал снова.