gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:03:52 25 4
gpt4 key购买 nike

当我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com