BackEnd/Spring Batch
-
14. ItemReader (Json)BackEnd/Spring Batch 2021. 12. 30. 22:30
JsonItemReader Json 데이터의 Parsing과 Binding을 JsonObjectReader 인터페이스 구현체에 위임하여 처리하는 ItemReader입니다. JacksonJsonObjectReader와 GsonJsonObjectReader 두 가지 구현체를 제공합니다. package io.springbatch.springbatchlecture; import lombok.RequiredArgsConstructor; import org.springframework.batch.core.*; import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; import org.springframework.batch.c..
-
13. ItemReader (XML)BackEnd/Spring Batch 2021. 12. 30. 22:10
JAVA XML API로는 DOM 방식, SAX 방식, Stax 방식(Streaming API for XML)이 있습니다. DOM 방식 문서 전체를 메모리에 로드한 후 Tree 형태로 만들어서 데이터를 처리하는 방식(pull 방식)으로 엘리먼트 제어는 유연하나 문서 크기가 클 경우 메모리 사용이 많고 속도가 느립니다. SAX 방식 문서의 항목을 읽을 때 마다 이벤트가 발생하여 데이터를 처리하는 방식(push 방식)으로 메모리 비용이 적고 속도가 빠른 장점은 있으나 엘리멘트 제어가 어렵습니다. StAX 방식 DOM과 SAX의 장점과 단점을 보완한 API 모델로서 push와 pull을 동시에 제공합니다. XML 문서를 읽고 쓸 수 있는 양방향 파서기를 지원하며, XML 파일의 항목에서 항목으로 직접 이동하면..
-
12. ItemReader (File)BackEnd/Spring Batch 2021. 12. 30. 21:45
FlatFileItemReader 2차원 데이터(표)로 표현된 유형의 파일을 처리하는 ItemReader입니다. 일반적으로 고정 위치로 정의된 데이터 필드(FixedLengthTokenizer)나 특수 문자에 의해 구별된 데이터의 행(DelimitedLineTokenizer)을 읽습니다. Resource와 LineMapper 두 가지 요소가 필요합니다. Resource FileSystemResource: new FileSystemResource("resource/path/config.xml") ClassPathResource: new ClassPathResource("classpath:path/config.xml") LineMapper 파일의 라인 한 줄을 Object로 변환해서 FlatFileItemR..
-
11. 스프링 배치 청크 프로세스 (Chunk)BackEnd/Spring Batch 2021. 12. 24. 17:30
Chunk란 여러 개의 아이템을 묶은 하나의 덩어리, 블록을 의미합니다. 한번에 하나씩 아이템을 입력 받아 Chunk 단위의 덩어리로 만든 후 Chunk 단위로 트랜잭션을 처리합니다. 즉, Chunk 단위의 Commit과 Rollback이 이루어집니다. 일반적으로 대용량 데이터를 한번에 처리하는 것이 아닌 청크 단위로 쪼개어서 더 이상 처리할 데이터가 없을 때까지 반복해서 입출력하는데 사용됩니다. Chunk vs Chunk Chunk는 ItemReader로 읽은 하나의 아이템을 Chunk에서 정한 개수만큼 반복해서 저장하는 타입 Chunk는 ItemReader로부터 전달받은 Chunk를 참조해서 ItemProcessor에서 적절하게 가공, 필터링한 다음 ItemWriter에 전달하는 타입 ChunkOri..
-
10. ScopeBackEnd/Spring Batch 2021. 12. 24. 04:42
스프링 컨테이너에서 빈이 관리되는 범위로는 singleton, prototype, request, session, application이 있으며, 기본은 singleton으로 생성됩니다. Spring Batch Scope 스프링 배치 스코프로는 @JobScope와 @StepScope가 있으며, Job과 Step의 빈 생성과 실행에 관여합니다. 프록시 모드를 기본값으로 하는 스코프로, 해당 스코프가 선언되면 빈의 생성이 애플리케이션 구동 시점이 아닌 빈의 실행 시점에 이루어집니다. 병렬처리 시 각 스레드마다 생성된 스코프 빈이 할당되기 때문에 스레드에 안전하게 실행이 가능합니다. @Values를 주입해서 빈의 실행 시점에 값을 참조할 수 있으며 일종의 Lazy Binding이 가능해 진다. @Value("..
-
09. FlowBackEnd/Spring Batch 2021. 12. 23. 23:45
FlowJob Step을 순차적으로만 구성하는 것이 아닌 특정한 상태에 따라 흐름을 전환하도록 구성할 수 있으며 FlowJobBuilder에 의해 생성됩니다. Flow와 Job의 흐름을 구성하는데만 관여하고 실제 비즈니스 로직은 Step에서 이루어집니다. 내부적으로 SimpleFlow 객체를 포함하고 있으며 Job 실행 시 호출됩니다. 아래와 같은 케이스에 사용합니다. Step이 실패하더라도 Job은 실패로 끝나지 않도록 해야 하는 경우 Step이 성공했을 때 다음에 실행해야 할 Step을 구분해서 실행 해야 하는 경우 특정 Step은 전혀 실행되지 않게 구성 해야 하는 경우 API // JobBuilderFactory > JobBuilder > JobFlowBuilder > FlowBuilder > F..
-
08. 배치 상태 유형BackEnd/Spring Batch 2021. 12. 22. 21:30
BatchStatus JobExecution과 StepExecution의 속성으로 Job과 Step의 종료 후 최종 결과 상태가 무엇인지 정의합니다. COMPLETED, STARTING, STARTED, STOPPING, STOPPED, FAILED, ABANDONED(처리를 완료했지만 성공하지 못한 단계와 재시작 시 건너 뛰어야하는 단계), UNKNOWN 단계가 있습니다. SimpleJob 마지막 Step의 BatchStatus 값을 Job의 최종 BatchStatus 값으로 반영 Step이 실패할 경우 해당 Step이 마지막 Step이 된다. FlowJob Flow 내 Step의 ExitStatus 값을 FlowExecutionStatus 값으로 저장 마지막 Flow의 FlowExecutionStat..
-
07. StepBackEnd/Spring Batch 2021. 12. 21. 07:10
StepBuilderFactory StepBuilder를 생성하는 팩토리 클래스로서 get(String name) 메서드를 제공합니다. StepBuilderFactory.get("stepName")으로 Step을 생성합니다. StepBuilder Step을 구성하는 설정 조건에 따라 다섯 개의 하위 빌더 클래스를 생성하고 실제 Step 생성을 위임합니다. API의 파라미터 타입과 구분에 따라 적절한 하위 빌더가 생성됩니다. TaskletStepBuilder: TaskletStep을 생성하는 기본 빌더 클래스 SimpleStepBuilder: TaskletStep을 생성하며 내부적으로 청크기반의 작업을 처리하는 ChunkOrientedTasklet클래스 생성 PartitionStepBuilder: Part..