Spring Batch, получить stepExecution в писателе?

Я пытаюсь получить readCount от StepExecution, чтобы записать его в свою базу данных на writer().

Есть ли способ поместить StepExecution в записывающую (JdbcBatchItemWriter) часть Step, чтобы я мог вызвать getReadCount() на нем?

Можете ли вы показать конфигурацию вашей партии?

pvpkiran 08.06.2018 16:53
2
1
740
3

Ответы 3

Вы можете аннотировать свой метод аннотациями @AfterStep или @AfterWrite. Например

@AfterStep
public void afterStep(StepExecution stepExecution) {
   //do your thing
}

Но тогда вам нужно либо расширить JdbcBatchItemWriter, либо обернуть его. Вам решать, как вы хотите действовать.

ваш класс, который даст, будет следующим:
открытый класс CustomStepListener реализует StepExecutionListener {

@Override
public void beforeStep(StepExecution stepExecution) {
    System.out.println("StepExecutionListener - beforeStep");
}

@Override
public ExitStatus afterStep(StepExecution stepExecution) {
    stepExecution.getReadCount();
    return null;
}

}

и настройте этот класс, в котором настроены читатель и писатель



Мне удалось найти обходной путь.

Я помещаю инкрементор в свой RowMapper, который записывает rowCount в инициализируемый в нем DTO, который увеличивается каждый раз, когда вызывается rowMapper (равный количеству строк, переданных ему).

Это означало, что поскольку мой писатель управляющей таблицы будет использовать последний экземпляр DTO, у него будет правильное количество строк, которое я мог бы записать в свою таблицу.

Другие вопросы по теме