В моем конкретном сценарии мне приходится сохранять огромные объекты, считываемые из файлов, в базу данных, но мой интервал фиксации настроен на value = 1
. Также я не совсем уверен, что процессор делегата в используемом CompositeItemProcessor
является идемпотентным. Итак, мой вопрос заключается в том, есть ли способ предотвратить потерю времени на повторную обработку и избежать многих неиспользуемых запросов к базе данных. Я также хочу использовать SkipListener для регистрации ошибок чтения/обработки/записи в определенную таблицу и подозреваю, что такая конфигурация (без повторной обработки) не соответствует этому.
Я использую весеннюю партию 2.1.9.
Заранее спасибо.
____________________________ОБНОВЛЕНИЕ 05.07.2016 ____________________________
После нескольких дней исследований я понял, что между некоторыми пользователями и разработчиками Spring ведутся концептуальные дебаты.
Теперь я знаю, что это поведение работает так, как задумано при пропущенных исключениях, возникающих на этапе написания, как сказал @MichaelMinella в комментарии к ответу в этом сообщение 2014 года:
Метод
ItemWriter#write
получает список элементов. Не просматривая их по одному, мы не сможем определить, какие из них в списке вызвали исключение в модуле записи.
Таким образом, платформа пока не может обнаружить сбойный элемент без сканирования всего списка (даже если размер фрагмента 1). Внутреннее поведение фреймворка для этого использует FaultTolerantChunkProcessor
, а RetryTemplate
описано в этот пост 2013 года более подробное обсуждение этого вопроса можно найти на этом сообщение на форуме весенней партии 2012.