Как обработать исключение и пропустить неправильную строку CSV? - PullRequest
0 голосов
/ 17 ноября 2018

Я читаю файл 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.Как я могу игнорировать нежелательные строки, т.е. пропускать нежелательные строки, но в то же время регистрировать информацию о них.Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 19 ноября 2018

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

В вашем случае вы можете реализовать логику регистрации в методе SkipListener#onSkipInRead(Throwable t);. FlatFileParseException будет передан в качестве параметра и предоставит вам необходимый контекст (номер строки и необработанный ввод).

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...