Spring Batch ItemWriter: пост-обработка, когда все записи были прочитаны и обработаны

У меня есть шаг в моей работе с ItemReader / ItemProcessor / ItemWriter. В моем ItemWriter мне нужно увеличить переменную для каждой записи, чтобы узнать, какой номер строки моей записи в файле. На данный момент я использую статическую переменную, которая хорошо подходит для того, что я хочу делать, когда я обрабатываю один файл. Проблема в том, что я могу перезапустить свою работу (с другими параметрами), и когда я обрабатываю другой файл без перезапуска моего приложения раньше, моя переменная не перезагружается до начального числа, пока оно статично, и я могу установить свой счетчик на «33» вместо 1 ...

Думаю, я мог бы обойти эту проблему, используя stepContext вместо статической переменной, но мне это не нравится. Я бы предпочел, чтобы метод вызывался после обработки всех записей (что-то вроде footerCallback FlatFileItemWriter), чтобы я мог сбросить свою статическую переменную. На самом деле я просто хотел бы избежать использования stepContext.

Есть ли такой метод для "классического" ItemWriter (а не для плоских файлов)? Или другой способ сделать это?


person Carrm    schedule 29.06.2015    source источник
comment
но мне это не нравится, можешь подробнее рассказать, почему тебе это не нравится?   -  person Michael Pralow    schedule 29.06.2015
comment
@MichaelPralow: это нормально для этого конкретного случая (увеличение счетчика), но мне придется сделать более сложный ItemWriter на другом шаге, который требует получить список объектов и обработать некоторые вещи после того, как весь файл будет прочитан и обработанный. Вот почему я бы предпочел использовать обратный вызов сейчас, даже если stepContext здесь будет работать нормально.   -  person Carrm    schedule 29.06.2015


Ответы (1)


Поскольку я хотел выполнить некоторую обработку только после того, как весь файл был прочитан и обработан, я понял, что могу использовать StepExecutionListener с его методом afterStep. Я могу сбросить свою статическую переменную (или сделать все, что захочу), когда шаг будет выполнен, чтобы я мог выполнять свою работу несколько раз без проблем со значениями моих статических полей.

person Carrm    schedule 29.06.2015