Spring Batch: повторите попытку фрагмента меньшими фрагментами по сравнению с обработкой одного элемента

У меня есть приложение, использующее Spring Batch 3.0.6. Задание Spring Batch использует обработку фрагментов. Интервал фиксации установлен на 100, а предел повторных попыток установлен на 5.

Модуль записи записывает блок данных (из 100 записей) в другое приложение (через TCP), когда достигается интервал фиксации. Если одна из записей плохая (по какой-то причине она вызывает исключение), то Spring Batch пытается записать фрагмент 5 раз (предел повторных попыток) и каждый раз терпит неудачу (как и ожидалось).

Затем Spring Batch пытается выяснить, какая из 100 записей в чанке дает сбой, повторяя их по одной за раз (т. е. интервал фиксации = 1). Кажется, это поведение по умолчанию для повторной попытки.

Есть ли способ быть более эффективным, повторяя, скажем, 10 записей за раз и постепенно сужая размер повторных попыток, пока не будет обнаружена оскорбительная запись. Таким образом, если 95-я запись плохая, то мы найдем ее быстрее, чем проверять их по одной, начиная с записи 1.

Я нашел этот пост от 2011 года:

Spring Batch: Commit-Interval не учитывается после отката во время записи

Есть ли способ заставить SB сначала попробовать меньшие фрагменты, чтобы сузить местонахождение плохой записи. Меньший размер фрагмента (скажем, 10 элементов) может быть необязательным элементом, настраиваемым пользователем, и после этого SB может пробовать по одному элементу за раз, чтобы найти плохую запись.


person Alan Miranda    schedule 15.02.2016    source источник
comment
Одна вещь, которую вы можете сделать, чтобы создать свой собственный модуль записи, который обертывает модуль записи (тот, который записывает в базу данных) до тех пор, пока не будут сделаны все записи, поэтому у вас есть полный контроль над этим настроенным модулем записи.   -  person surya    schedule 16.02.2016
comment
индивидуальный подход к записи может привести к очень длительным транзакциям   -  person Michael Pralow    schedule 16.02.2016
comment
Видя, что эта логика реализована в частном методе scan из FaultTolerantChunkProcessor, вам, вероятно, потребуется переопределить хороший фрагмент этого класса (по крайней мере, метод write), а затем вместо этого создать его экземпляр.   -  person Artefacto    schedule 18.02.2016
comment
Короче... нет. Это невозможно с текущим кодом без существенных изменений.   -  person Michael Minella    schedule 18.02.2016
comment
Спасибо всем за ваши ответы. Я хотел настроить SB для повторной попытки с более чем 1 записью за раз, и Майкл М. дал мне ответ, в котором я нуждался.   -  person Alan Miranda    schedule 24.02.2016