Весенняя пакетная обработка чанков - PullRequest
0 голосов
/ 27 ноября 2018

У меня всего 8 записей в таблице, из которых 6 имеют право на jpareader, когда читаются вызовы весны.Теперь у меня есть размер страницы и размер чанка, установленный на 1 для тестирования.Ожидая, что при выполнении задания оно должно выполнить 6 вызовов чтения, а затем обработать их один за другим и записать их один за другим.Но на самом деле происходит то, что он просто вызывает чтение 4 раза (из журналов я вижу чтение страницы 0 ... 1 таким образом) и обрабатывает 4, из которых отфильтровывается, потому что не соответствует критериям для записи, а затем просто обновляет 3 записи изадание помечено как выполненное успешно.

Подобно тому, как это задание необходимо выполнить 3 раза для обработки всех записей.Что-то нам не понятно.Попытка понять обработку чанка, но я думаю, что чанк предназначен только для агрегации результата, чтобы сделать вызов записи ... после этого я ожидаю, что чтение и процесс должны продолжаться.для производства, если мы установим большое число, потребуется больше памяти (куча).

1 Ответ

0 голосов
/ 27 ноября 2018

Я вижу замешательство.Параметр pageSize в JpaPagingItemReader не имеет ничего общего с chunkSize (или commit-interval) шага, ориентированного на куски.

Если вы берете JpaPagingItemReader и используете его внешаг, ориентированный на чанк, с pageSize = 4, он выбирает 4 элемента за раз (т. е. на страницу).Теперь эти 4 элемента можно обрабатывать, например, порциями по 2, и у вас будет по две порции на страницу.JpaPagingItemReader будет считывать первую страницу (список из 4 элементов) и затем возвращать элементы из этого списка каждый раз, когда на шаге, ориентированном на порцию, выполняется вызов read.Вот пример с pageSize = 4, chunkSize = 2, totalItems = 8 и прослушивателем чанков:

ChunkListener.beforeChunk
Reading page 0
Reading item1
Reading item2
Writing item1
Writing item2
ChunkListener.afterChunk
ChunkListener.beforeChunk
Reading item3
Reading item4
Writing item3
Writing item4
ChunkListener.afterChunk
ChunkListener.beforeChunk
Reading page 1
Reading item5
Reading item6
Writing item5
Writing item6
ChunkListener.afterChunk
ChunkListener.beforeChunk
Reading item7
Reading item8
Writing item7
Writing item8
ChunkListener.afterChunk
ChunkListener.beforeChunk
Reading page 2
Reading item = null
ChunkListener.afterChunk

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...