2015-07-24 3 views
11

У меня есть простая программа, работающая с считывателем Spring Batch Input, Writer. Целью программы является простое чтение файла csv.Конфигурация с интервалом прерывания весны не работает

Я установил commit-interval на 5. В файле csv было всего 5 записей, но по какой-то причине Writer был вызван 3 раза, хотя значение commit-interval было установлено равным 5. Я ожидал, что сценарий будет вызываться только один раз на основе я понимаю, что читатель и процессор читают каждый элемент по строкам, а затем писатель обрабатывает все 5 одновременно. Наверное, я не понимаю, как влияет фиксация-интервал. Есть рекомендации?

+0

Причина моего вопроса: у меня есть миллион записей, которые мне, возможно, придется прочитать и перейти к следующему шагу, используя коллекцию Java. Теперь, когда я пытаюсь читать из небольшого файла только последний фрагмент, число которого равно к указанному commit-linterval передается на следующий шаг с использованием StepExecution.На предыдущие записи не передаются. Как я могу гарантировать, что все записи будут переданы. Будет ли смена справки-интервала? Или есть другой подход? – user5053360

+0

Я использую ExecutionContext и ExecutionContextPromotionListener для этого. Но только последний кусок, равный интервалу фиксации, устанавливается и читается на следующем шаге. – user5053360

+2

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

ответ

0

Я думаю, вы должны иметь что-то вроде:

<job id="stepJob"> 
    <step id="step1"> 
     <tasklet> 
      <chunk reader="inputReader" writer="outputWriter" commit-interval="5"/> 
     </tasklet> 
    </step> 
</job> 

Последняя часть примера шага является фрагмент тега, где мы определяем, какой кусок для этого шага. Атрибут commit-interval установлен в 5 в примере, что означает, что записи будут записаны до тех пор, пока не будут прочитаны и обработаны 5 записей.

Смежные вопросы