java - 如何跳过 FlatFileItemReader<T> 中为空的特定列的值?

标签 java spring mongodb spring-mvc spring-batch

当我在 Spring Batch 中读取 CSV 文件时,当特定列没有实际值时,它会在行中抛出 BindException (typeMismatch)。

如何跳过它们?

最佳答案

我配置了我的 ItemReader,如下所示:

Spring 配置:

@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 实现:

配置:

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..

    }
}

关于java - 如何跳过 FlatFileItemReader<T> 中为空的特定列的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51133183/

相关文章:

java - 线程监视器 W WSVR0605W : Thread "WebContainer : 11" (000005bb) has been active for 743576 milliseconds and may be hung

java - SpringFramework ResponseBody 返回具有空值的对象

java - 是否使用 Spring Solr 数据来实现像备份这样的灵活请求?

mongodb - 如何在容器重启之间持久化 MongoDB 数据?

java - Groovy + Java接口(interface)继承问题

java温度转换程序不工作

java - 使用 JProfiler 分析 Java mongodb 查询, "Retrieve Data"和 "Query"之间有什么区别

bash - 如何保护 mongodump 从远程计算机进行备份?

java - 可选打印 Java 中的堆栈跟踪

java - 如何将条形码 Vision API 与 Google Cardboard 集成?