2012-09-05 7 views
2

나는 FlatFileItemReader으로 csv 파일을 읽고 FieldSetMapper을 사용하여이를 도메인 개체에 매핑합니다.FlatFileItemReader로 읽기 선 캡처하기

매핑이 실패한 경우 원래의 행을 FlatFileItemReader에서 읽을 수 있도록하고 싶습니다.이를 다른 CSV 파일에 쓸 수 있습니다.

원래 독창적 인 아이디어는 일부 리스너를 사용하여 읽기 문자열을 StepContext으로 푸시 한 다음 SkipListener을 입력하여 다른 파일에 쓰려고 문자열을 가져 오는 것이 었습니다. 그러나 FlatFileItemReader에 의해 읽힌 원래 선을 붙잡는 방법을 발견 할 수 없다.

제안 사항?

답변

1

구성이 Spring Batch Documentation for FlatFileItemReader와 유사한 경우, 대신 풍부한 예외 여기

을 던졌습니다 보통 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); 
      } 
} 

}

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 
    } 
}