[英]Spring Batch FlatFileItemReader continue on incorrect number of tokens
我正在使用 Spring Batch FlatFileItemReader
来解析 csv 文件。 我时不时地得到一条格式错误的行,应用程序完全崩溃:
Caused by: org.springframework.batch.item.file.transform.IncorrectTokenCountException: Incorrect number of tokens found in record: expected 11 actual 18
有没有办法告诉FlatFileItemReader
继续(抛出异常并继续或忽略并继续)而不完全退出应用程序。
我猜我可能需要扩展 FlatFileItemReader 来实现这一点,因为似乎没有任何设置。 关于如何最好地进行并实现这一目标的任何建议?
基本上,如果您使用 Java Config 来管理您的批处理作业,您可以执行以下操作
stepBuilderFactory.get("step1")
.<Person, Person>chunk(10)
.reader(reader)
.writer(writer)
.processor(processor)
.faultTolerant()
.skipLimit(10)
.skip(RuntimeException.class)
.listener(skipListener) // if you want to add
.build();
我能够通过创建一个扩展DefaultLineMapper
的类来解决这个问题,该类被注入到FlatFileItemReader
。
然后我像这样覆盖了 mapLine 方法:
@Override
public T mapLine(String line, int lineNumber) throws Exception {
T t = null;
try {
t = super.mapLine(line, lineNumber);
} catch (Exception e) {
log.error("Unable to parse line number <<{}>> with line <<{}>>.", lineNumber, line);
}
return t;
}
我不确定这是否与您的问题相同,但是在解析包含引号“字符的插入符号“^”分隔文件时,我遇到了同样的错误。
"字符旨在用于跨行结尾扩展字段或包含包含分隔符的字符串。所以我的行看起来像这样:
^3500 LCF Gas: 109" Wheelbase, Reg Cab^Chevrolet^3500 LCF Gas^109" Wheelbase, Reg Cab^L
将被解析为只有 2 个字段:
我真正想要的是 5 个字段:
我的文件不包含任何 & 符号,所以我将DelimitedLinetokenizer
默认quoteCharacter 从"更改为& 。
lineTokenizer.setQuoteCharacter('&');
这解决了我在使用 Spring Batch 时导致相同错误的问题。
我设法通过将DefaultLineMapper
的属性“ lineTokenizer
”的属性“ strict
”设置为false来解决这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.