3

でcsvファイルを読み取り、それFlatFileItemReaderを使用しFieldSetMapperてドメインオブジェクトにマップしています。

マッピングが失敗した場合は、元の行をFlatFileItemReader自由に読み取って、別のcsvファイルに書き込めるようにしたいと思います。

私の当初のアイデアは、リスナーを使用して読み取り文字列をプッシュしStepContext、次にaを使用SkipListenerして文字列をフェッチして別のファイルに書き込むことでした。しかし、によって読み取られた元の行をキャッチする方法が見つかりませんFlatFileItemReader

提案?

4

2 に答える 2

2

ItemReadListenerインターフェースのonReadError(Exception)メソッドを実装すると、必要なことを正確に実行できます。

public void onReadError(Exception e) {
    if(e instanceof FlatFileParseException) {
        FlatFileParseException ffpe = (FlatFileParseException) e;
        ffpe.getLineNumber(); //The line number error occured
        ffpe.getInput();//Text value of the unparsed line
    }
}
于 2012-09-06T14:04:46.150 に答える
1

構成がFlatFileItemReaderのSpringBatchドキュメントに類似している場合は、強化された例外をスローする通常のDefaultLineMapperの代わりにカスタムLineMapperを使用できます。

ここにいくつかの簡単なサンプルコードがあります

public class DefaultLineMapper<T> implements LineMapper<T>, InitializingBean {
    (...)

public T mapLine(String line, int lineNumber) throws Exception {
            try {
      return fieldSetMapper.mapFieldSet(tokenizer.tokenize(line));
            }
            catch (...) {
                throw new CustomException(line, lineNumber);
            }
}

}

于 2012-09-05T18:47:35.673 に答える