java - MultiResourceItemReader - 如果标题无效,则跳过整个文件
问题描述
我的 Spring Batch 作业读取csv
包含两种类型标头的文件列表。如果文件的标题与两种可能的标题类型之一不匹配,我希望读者跳过整个文件。
我看过Spring Boot 批处理 - MultiResourceItemReader : move to next file on error。但我看不到如何验证标头令牌以确保它们在计数和内容上匹配
解决方案
我能够通过执行以下操作来解决这个问题,
public FlatFileItemReader<RawFile> reader() {
return new FlatFileItemReaderBuilder<RawFile>()
.skippedLinesCallback(line -> {
// Verify file header is what we expect
if (!StringUtils.equals(line, header)) {
throw new IllegalArgumentException(String.format("Bad header!", line));
}
})
.name( "myReader" )
.linesToSkip( 1 )
.lineMapper( new DefaultLineMapper() {
{
setLineTokenizer( lineTokenizer );
setFieldSetMapper( fieldSetMapper );
}} )
.build();
}
reader()
在我的MultiResourceItemReader
.
请注意,header
、lineTokenizer
和fieldSetMapper
都是我设置的变量,具体取决于我的作业预期读取的文件类型(以及相应的标题集)。
推荐阅读
- java - 如何限制来自数据库、Spring Data JPA、DB2 的结果
- csv - Neo4j 批量导入中的 ID 作为 int 会在关系导入中产生错误
- amazon-web-services - 带有使用 terraform 创建的 https 侦听器的 AWS 负载均衡器抛出连接被拒绝
- angular - Clarity Datagrid 服务器端绑定自定义过滤器(代码优化)
- android - Android Monitor logcat 不显示任何消息 - 工作室版本 2.2.1
- javascript - IE11 调试器 (F12) 中缺少图标
- electron - 打包时的电子写入文件
- javascript - totaljs --translate 命令找不到所有要翻译的文本,尽管包裹在“@()”标签中
- postgresql - 在 postgres 中创建超级用户
- node.js - GraphQL 解析器问题