Я новичок в Spring batch с весенней загрузкой и прочитал почти все возможные доступные статьи, но не нашел точных сценариев / фрагментов для варианта использования, как показано ниже.
Я использовал RetryTemplate, но он сразу же повторяет элемент при исключении, поэтому у меня это не работает.
Я создал политику пропуска, которая пропускает исключение и дает мне ожидаемое поведение, но не может запустить повторные попытки (3) таким же образом.
Может ли кто-нибудь помочь с некоторыми примерами и помочь мне в том же ...
@SabirKhan: да, за тот же стол
чтобы элементы, пропущенные один раз, навсегда остались помеченными как пропущено, или вы хотите снять отметку обработанный после успешной обработки?
@SabirKhan: На самом деле я работаю с массовыми данными, поэтому я хочу сохранить пропускаемые элементы в БД с флагом пропуска, и через некоторый промежуток времени я хочу повторить эти пропущенные элементы 3 раза, и после этого я помечу их как Неудачные, если вообще обработка будет работает не так, как ожидалось.




After Processing all the 5 items with failed/success scenario then retry failed items after some time interval
Функции отказоустойчивости (пропуск и повтор) выполняются для элементов внутри фрагмента, а не для всего фрагмента. Таким образом, невозможно обработать все элементы (где некоторые из них могут выйти из строя), тогда после обработки всего фрагмента повторите попытку неудачных. Когда вы указываете политику повтора, эта политика будет применяться к элементам, а не ко всему блоку.
I have used the RetryTemplate but there it retries the item on exception immediately
Вы можете установить BackoffPolicy в шаблоне повтора, и между каждой попыткой повтора будет период отсрочки (вместо немедленного повтора). Но опять же, эта политика будет применяться к повторно выполняемому элементу, а не ко всему блоку.
Один из методов, который вы можете использовать (поскольку входными данными является таблица базы данных), является вариант «шаблона индикатора процесса» (показан в этом образце). Идея состоит в том, чтобы использовать флаг для обозначения записей, которые необходимо обработать. Ваше задание должно читать только те записи, которые должны быть обработаны, отмечать успешные записи как обработанные (обновлять флаг), а пропущенные как необработанные (или просто не обновлять флаг, поскольку по умолчанию установлено значение false). Таким образом, пропущенные записи будут частью ввода при следующем запуске задания и будут повторяться по дизайну.
Надеюсь это поможет.
для Все пропущенные элементы должны быть зарегистрированы в db, произойдет ли это с той же таблицей, из которой были прочитаны данные (путем обновления какого-либо флага), или с какой-либо другой таблицей?