MultiResourceItemReader - 如果 header 无效则跳过整个文件
MultiResourceItemReader - Skip entire file if header is invalid
我的 Spring 批处理作业读取 csv
文件列表,其中包含两种类型的 header。如果 header 与两种可能的 header 类型之一不匹配,我希望 reader 跳过整个文件。
我看过 。
但我不知道如何验证 header 令牌以确保它们在数量和内容上匹配
我通过执行以下操作解决了这个问题,
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();
}
我在 MultiResourceItemReader
中设置委托时调用了 reader()
方法。
注意 header
、lineTokenizer
和 fieldSetMapper
都是我根据文件类型设置的变量(因此哪一组 headers) 我的工作需要阅读。
我们可以在基于 XML 的配置中执行此操作吗?
我的 Spring 批处理作业读取 csv
文件列表,其中包含两种类型的 header。如果 header 与两种可能的 header 类型之一不匹配,我希望 reader 跳过整个文件。
我看过
我通过执行以下操作解决了这个问题,
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();
}
我在 MultiResourceItemReader
中设置委托时调用了 reader()
方法。
注意 header
、lineTokenizer
和 fieldSetMapper
都是我根据文件类型设置的变量(因此哪一组 headers) 我的工作需要阅读。
我们可以在基于 XML 的配置中执行此操作吗?