[英]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.