Как пропустить значения определенного столбца, где они пусты в FlatFileItemReader <T>? - PullRequest
0 голосов
/ 02 июля 2018

Когда я читаю CSV-файл в Spring Batch, он выдает исключение BindException (typeMismatch) в строке, когда нет фактического значения для определенного столбца.

Как их пропустить?

1 Ответ

0 голосов
/ 02 июля 2018

Я настроил свой ItemReader, как показано ниже:

Spring Config:

@Bean
Step step1() {
    return stepBuilderFactory.get("step1")
            .listener(dataProcessor)
            .chunk(100)
            .faultTolerant()
            .reader(yourReader()).faultTolerant().skipPolicy(new ItemVerificationSkipper())
            .processor(dataProcessor)
            .writer(writer())
            .build();
}

Важной частью является добавление skipPolicy:

reader(yourReader()).faultTolerant().skipPolicy(new ItemVerificationSkipper())

ItemVerificationSkipper.java

@Slf4j
public class ItemVerificationSkipper implements SkipPolicy {

    @Override
    public boolean shouldSkip(Throwable exception, int skipCount) throws SkipLimitExceededException {

            StringBuilder errorMessage = new StringBuilder();
            errorMessage
                    .append("Unexpected exception ")
                    .append(exception.toString())
//                    .append(ExceptionUtils.getStackFrames(exception))
                    .append("\n");
            log.error("{}", errorMessage.toString());
            return true;
    }

}

Редактировать после дальнейших комментариев:

Реализация RowMapper, необходимая для пропуска значений столбцов:

Config:

itemReader.setRowMapper(new CustomRowMapper());

CustomRowMapper.java

public class CustomRowMapper implements RowMapper<YourClass> {

    @Override
    public YourClass mapRow(ResultSet rs, int rowNum) throws SQLException {
        String columnXYZ = rs.getString("yourColumnName");
        //check input etc..

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