Я настроил свой 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..
}
}