Spring пакетный запуск процессора/записывающего устройства в зависимости от размера фрагментаJAVA

Программисты JAVA общаются здесь
Anonymous
Spring пакетный запуск процессора/записывающего устройства в зависимости от размера фрагмента

Сообщение Anonymous »

Привет, я пытаюсь понять структуру весеннего пакета.
Учитывая следующую конфигурацию задания:

Код: Выделить всё

@Bean
public Step jobStep() {
return new StepBuilder("stepName", repo)
. chunk(10, txnManager)
.reader(reader)
.processor(processor)
.writer(writer)
.build();
}
И следующий пример процессора:

Код: Выделить всё

public class JobProcessor implements ItemProcessor {
@Override
public List process(List items) {
for (Entity record: items) {
//do some logic
return items;
}
Мои наблюдения заключаются в том, что устройство чтения/процессора/записи запускается столько же раз, сколько и размер фрагмента. Например, в приведенном выше примере процессор запустится 10 раз, и записывающее устройство тоже. Если мой читатель извлекает только 2 записи, это меньше размера чанка.
Размер списка в ItemProcessor равен всего 2 – почему он выполняется еще 8 раз если передан весь набор записей? Единственный способ избежать дублирующей обработки — это отслеживать, обрабатывается (и записывается) элемент или нет.
Это несложно сделать, но я хочу понять, является ли это нормальным поведением. или если я делаю что-то не так.
Вкратце: если набор записей пакета Spring меньше размера фрагмента, разве процессор/записатель не должен запускаться только один раз, поскольку первый фрагмент содержит весь набор записей?

Подробнее здесь: https://stackoverflow.com/questions/784 ... chunk-size

Вернуться в «JAVA»