2016-06-22 6 views
1

В моем конкретном сценарии я должен сохранять огромные объекты, считанные из файлов в базу данных, но мой интервал фиксации настроен с value = 1. Также я не совсем уверен, что обработчик делегата в используемом CompositeItemProcessor идемпотент. Мой вопрос в том, есть ли способ предотвратить потраченное время на переработку и избежать многих неиспользуемых запросов к db. Я также хочу использовать SkipListener для регистрации ошибок при чтении/обработке/записи в конкретной таблице и подозревать, что такая конфигурация (без повторной обработки) не соответствует этому.Есть ли способ предотвратить пакет от двойной обработки одного и того же фрагмента/элемента при пропуске?

Я использую весеннюю партию 2.1.9.

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

____________________________ UPDATE 07-05-2016 ____________________________

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

ItemWriter#write Метод получает список элементов:

я теперь, что такое поведения ковшики, как разработанные на пропущенном исключении выброшенного во время написания фазы, как сказано @MichaelMinella в комментариях для ответа в этом 2014 post знаю. Не обойдя через них по одному, нам не удастся определить, какой из в списке выбрал исключение в записи.

Так нет возможности еще в рамках обнаружить не удалось деталь без сканирования для всего списка (даже если размер порции составляет). Внутреннее поведение структуры для этого использует FaultTolerantChunkProcessor, а RetryTemplate описано в this 2013 post. Более подробное обсуждение этого вопроса можно найти на этом spring batch forum 2012 post.

ответ

0

Если размер вашего куска равен единице, элемент не должен обрабатываться несколько раз. Когда происходит пропуски, весенняя партия удаляет пропущенный элемент в куске и перерабатывает его. Когда кусок содержит только один элемент, не должно быть элементов, обработанных mulitple раз.

+0

Я ожидал, что это поведение тоже @joshiste, но на практике структура всегда перерабатывает список, кэшированный при чтении, и обрабатывает мини-куски для каждого элемента, чтобы узнать, какой элемент отвечает за ошибку, даже если этот список содержит только один элемент. Я хочу знать, как переопределить это поведение или настроить пакет, чтобы пропустить эту дорогостоящую попытку. Возможно, это невозможно, если я хочу использовать SkipCheckListener для регистрации ошибок при обработке. – guilhermerama