Пакет Spring пропускает элементы во время процесса и регистрирует пропущенный элемент в БД, а затем снова записывает данные в БД

Я новичок в Spring batch с весенней загрузкой и прочитал почти все возможные доступные статьи, но не нашел точных сценариев / фрагментов для варианта использования, как показано ниже.

  1. Читать данные из БД (например: 5 пунктов)
  2. Процесс данные: вызов API и в случае сбоя вызова API пропустить элемент и обработать следующий элемент. (Для всех 5 пунктов подряд)
  3. Все пропущенные элементы должны быть зарегистрированы в db
  4. После обработки всех 5 элементов с неудачным / успешным сценарием повторите попытку неудачных элементов через некоторый интервал времени.

Я использовал RetryTemplate, но он сразу же повторяет элемент при исключении, поэтому у меня это не работает.

Я создал политику пропуска, которая пропускает исключение и дает мне ожидаемое поведение, но не может запустить повторные попытки (3) таким же образом.

Может ли кто-нибудь помочь с некоторыми примерами и помочь мне в том же ...

для Все пропущенные элементы должны быть зарегистрированы в db, произойдет ли это с той же таблицей, из которой были прочитаны данные (путем обновления какого-либо флага), или с какой-либо другой таблицей?

Sabir Khan 29.10.2018 12:05

@SabirKhan: да, за тот же стол

Ganesh 29.10.2018 12:13

чтобы элементы, пропущенные один раз, навсегда остались помеченными как пропущено, или вы хотите снять отметку обработанный после успешной обработки?

Sabir Khan 29.10.2018 12:14

@SabirKhan: На самом деле я работаю с массовыми данными, поэтому я хочу сохранить пропускаемые элементы в БД с флагом пропуска, и через некоторый промежуток времени я хочу повторить эти пропущенные элементы 3 раза, и после этого я помечу их как Неудачные, если вообще обработка будет работает не так, как ожидалось.

Ganesh 29.10.2018 13:23
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
0
4
822
1

Ответы 1

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). Таким образом, пропущенные записи будут частью ввода при следующем запуске задания и будут повторяться по дизайну.

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

Другие вопросы по теме