Я читаю файл csv
, используя Spring batch
.Я читаю содержимое csv
и записываю это содержимое в базу данных в соответствии с одним из классов entity
.
Теперь в csv могут быть определенные строки, которые являются неправильными и не соответствуютPOJO атрибуты.Чтобы справиться с этим, я настроил Step
следующим образом:
Step step = stepBuilderFactory.get("CSV-Step")
.<Book, Book>chunk(100)
.faultTolerant()
.skip(FlatFileParseException.class)
.skipLimit(1)
.reader(itemReader)
.writer(itemWriter)
.build();
В основном он пропускает строку, которая вызывает FlatFileParseException
, и переходит к последующим строкам.Теперь я также хочу записать строки, для которых анализ не может быть сделан.Для этого в моем GlobalExceptionHandler
, помеченном @ControllerAdvice
, я сделал следующий метод:
@OnReadError
public void handleCsvParseException(FlatFileParseException ex, Throwable throwable) {
logger.error("! FlatFileParseException, line is: " + ex.getLineNumber());
logger.error("! FlatFileParseException, input is: " + ex.getInput());
logger.error("! Message: " + throwable.getMessage());
logger.error("! Cause: " + throwable.getCause());
}
Дело в том, что этот метод не вызывается, потому что в моем Step
есть конфигурация skip
.Как я могу игнорировать нежелательные строки, т.е. пропускать нежелательные строки, но в то же время регистрировать информацию о них.Буду признателен за любую помощь.