Возможно, проблема в том, что вы смешиваете нумерацию страниц и обновляете критерии запроса чтения (IS_UPDATED).
Пример с размером страницы = 2 и 6 строками в дБ
- A IS_UPDATED = true
- B IS_UPDATED = true
- C IS_UPDATED = истина
- D IS_UPDATED = истина
- E IS_UPDATED = истина
- F IS_UPDATED = true
Первая прочитанная страница = 1 возвращаемые строки A и B
После выполнения записи (установите IS_UPDATED в false для A & B), мы имеем в db:
- C IS_UPDATED = true
- D IS_UPDATED = true
- E IS_UPDATED = true
- F IS_UPDATED = true
Второе чтение переместится на страницу 2 , поэтому оно займет строку E & F , а не C & D
Либо:
- вы не должны обновлять столбец IS_UPDATED.
- Или вы создаете подкласс
RepositoryItemReader
, где вы переопределяете getPage
@Override
public int getPage() {
return 0;
}
Опция 2 более устойчива к пакетному аварийному завершению / ошибке, но вы должны убедиться, что IS_UPDATEDвсегда устанавливайте в записывающем устройстве значение false, иначе читатель будет бесконечно зацикливаться.
Вариант 2 также потребует дополнительной настройки, если вы используете многопоточный шаг.