Spring Batch (3) - Reader 만들기
스프링 배치에서 Reader의 구현체는 주로 3가지를 사용하는것 같다.
1. 파일을 다루는 Reader - FlatFileItemReader
2. xml를 사용하는 Reader
3. DB를 사용하는 Reader
이번에 작업할 프로젝트에서는 1번째에 해당되는 파일을 다루는 리더가 필요했다.
그런데... 문제는 Flat파일 리더는 한 라인에 하나의 레코드가 들어 가야한다.
뭐..다수의 라인을 Pattern을 이용하여 하나의 레코드를 구성하는 방법도 있지만
이번에 파싱할 파일 구조가 좆망할 구조라서 ㅠㅠ
<파싱 파일 구조>
!!!KEY!!!key입니다.
!!!BODY!!!body입니다.
근데 두줄입니다.
!!!KEY!!!key2입니다.
!!!BODY!!!body입니다.
근데 두줄입니다.
위 파일을 리딩 하려면 잘 구현된 FlatFileItemReader를 버리고 새로운 리더를 작성해야 했다.
작업하기 앞서 고민되는 사항은 오류 시 이전 작업 위치를 저장하고 재시작하는 기능이 스프링 배치에 있는데 새로운 리더에서 작동을 할까 부담이 되었다.
하지만 FlatFileItemReader와 부모에 해당되는 AbstractItemCountingItemStreamItemReader를 분석 해보니 작업 위치 저장과 재시작 관련된 부분은 AbstractItemCountingItemStreamItemReader에 이미 구현이 되어 있어서 이를 상속 받아 새로운 리더를 작성을 하면 제대로 동작 하는 듯 보였다. 더 테스트는 해야겠지만 (작성 시 FlatFileItemReader를 참조하면 작성하기 쉬움)
Reader의 테스트는 Template로 만든 디렉토리내의 test하위에 있는 ExampleItemReaderTest를 참고 하면 된다.
댓글
댓글 쓰기