我正在使用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来实现这一点,因为似乎没有任何设置。关于如何最好地进行并实现这一目标的任何建议?
答案 0 :(得分:3)
您可以为批处理作业配置SkipLogic 这是link to doc
基本上,如果您使用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();
答案 1 :(得分:2)
我能够通过创建一个扩展注入DefaultLineMapper
的{{1}}的类来解决这个问题。
然后我像这样覆盖mapLine方法:
FlatFileItemReader
答案 2 :(得分:0)
我不确定这是否与您的问题相同,但在解析包含引号“字符的插入符”^“分隔文件时遇到了同样的错误。
“字符旨在用于跨行结尾扩展字段或包含包含分隔符的字符串。所以我的行看起来像这样:
^3500 LCF Gas: 109" Wheelbase, Reg Cab^Chevrolet^3500 LCF Gas^109" Wheelbase, Reg Cab^L
将被解析为只有2个字段:
我真正想要的是5个领域:
我的文件中没有任何&符号,因此我将DelimitedLinetokenizer
默认quoteCharacter从“更改为&amp; 。
lineTokenizer.setQuoteCharacter('&');
修复了使用Spring Batch时导致相同错误的问题。
答案 3 :(得分:0)
我设法通过将strict
中属性“ lineTokenizer
”的属性“ DefaultLineMapper
”设置为 false 来解决此问题。