들어가며 간단한 SimpleJob 예제의 TaskletStep의 실행 흐름을 디버깅을 통해 직접 확인해보자. 예제코드 TaskletStepArchitectureConfiguration.java import lombok.RequiredArgsConstructor; import org.springframework.batch.core.*; import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; import org.springframework.batch.core.launch..
들어가며 간단한 SimpleJob 예제의 실행 흐름을 디버깅을 통해 직접 확인해보자. 이번기회에 실행 흐름을 정리해서 앞으로 BatchJob 예제를 수행할때마다 흐름을 따라갈 수 있도록 글을 남긴다. 예제코드 JobTextConfiguration.java @Configuration @RequiredArgsConstructor public class JobTestConfiguration { // job 생성 private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; @Bean public Job testJob() { return this.jobBuilderFactory.get("t..
SpringBatch5의 다양한 파라미터 지원 https://devfunny.tistory.com/930 SpringBatch5 변경사항 정리 (vs SpringBatch4) SpringBatch 5.0 이전 SpringBatch 공부할때 SpringBatch 4.0 버전이였다. 최근, SpringBatch 복습을 위해 새로 프로젝트를 셋팅하면서 업데이트된 SpringBatch 5.0을 선택했는데, 생각보다 4.0 버전에 달라진 사항들 devfunny.tistory.com 위 SpringBatch4 vs SpringBatch5 포스팅에서도 설명했지만, SpringBatch5 부터 다양한 파라미터를 사용할수 있게 되었다. 기존 SpringBatch4 Long, Double, Sring, Date 타입의 파..
SpringBatch 5.0 이전 SpringBatch 공부할때 SpringBatch 4.0 버전이였다. 최근, SpringBatch 복습을 위해 새로 프로젝트를 셋팅하면서 업데이트된 SpringBatch 5.0을 선택했는데, 생각보다 4.0 버전에 달라진 사항들이 있었다. 잊어버리기 전에 정리해보고자 포스팅한다. SpringBatch 5.0 변경사항에 대한 공식 홈페이지는 아래와 같다. https://docs.spring.io/spring-batch/docs/current/reference/html/whatsnew.html What’s New in Spring Batch 5.0 Spring Batch 5.0 has the following major themes: Java 17 Requirement M..
목표 Customer 테이블에 등록된 테스트 데이터 중 firstname 컬럼이 "A"로 시작하는 데이터를 찾아, 해당 데이터를 json 포맷으로 customer.json 파일을 생성해보자. Job 생성 JsonConfiguration.java package com.project.springbatch._58_writer_json; import lombok.RequiredArgsConstructor; import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; impo..
Job 생성 아래와 같은 Job을 만들자. Processor 체이닝 리스트 기대 결과 CustomItemProcessor1 [item1, item2, item3, item4, item5, item6, item7, item8, item9, item10] CustomItemProcessor2 [item11, item22, item33, item44, item55, item66, item77, item88, item99, item1010] Job 수행 CompositionItemConfiguration.java package com.project.springbatch._66_processor_delegate; import lombok.RequiredArgsConstructor; import org.spring..
예제 파일 생성 JobController.java @RestController @RequiredArgsConstructor public class JobController { private final JobRegistry jobRegistry; private final JobOperator jobOperator; private final JobExplorer jobExplorer; } Customer.java package com.project.springbatch._77_operation; import lombok.AllArgsConstructor; import lombok.Data; import java.util.Date; @Data @AllArgsConstructor public class Cust..
@SpringBatchTest 자동으로 ApplicationContext에 테스트에 필요한 여러 유틸 Bean을 등록해주는 어노테이션 클래스 설명 JobLauncherTestUtils launcJob(), launchStep()과 같은 스프링 배치 테스트에 필요한 유틸성 메서드를 지원한다. JobRepositoryTestUtils JobRepository를 사용해서 JobExecution을 생성 및 삭제 기능 메서드를 지원한다. StepScopeTestExecutionListener @StepScope 컨텍스트를 생성해준다. 해당 컨텍스트를 통해 JobParameter 등을 단위 테스트에서 DI 받을 수 있다. JobScopeTestExecutionListener @JobScope 컨텍스트를 생성해준다...
SynchronizedItemStreamReader Thread-safe 하지 않은 ItemReader를 Thread-safe하게 처리하도록 하는 기능을 제공한다. Thread-safe Reader 각 스레드가 대기하고 있다가 순차적으로 Item을 읽어온다. read() public class SynchronizedItemStreamReader implements ItemStreamReader, InitializingBean { private ItemStreamReader delegate; public void setDelegate(ItemStreamReader delegate) { this.delegate = delegate; } /** * This delegates to the read method ..
Partitioning MasterStep이 SlaveStep을 실행시키는 구조이다. SlaveStep은 각 스레드에 의해 독립적으로 실행이 된다. SlaveStep은 독립적인 StepExecution 파라미터 환경을 구성한다. SlaveStep은 ItemReader / ItemProcessor / ItemWriter 등을 가지고 동작하며 작업을 독립적으로 병렬 처리한다. MasterStep은 PartitionStep이며, SlaveStep은 TaskletStep, FlowStep 등이 올 수 있다. 예제코드 PartitioningCustomer.java package com.project.springbatch._45_partitioning; import lombok.AllArgsConstructor; ..
Parallel Steps SplitState를 사용하여 여러개의 Flow들을 병렬적으로 실행하는 구조이다. 실행이 다 완료된 후 FlowExecutionStatus 결과들을 취합해서 다음 단계를 결정한다. Job 생성 ParallelStepConfiguration.java package com.project.springbatch._44_parallel; import lombok.RequiredArgsConstructor; import org.springframework.batch.core.Job; import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; import org.springframework.batch.c..
스프링배치 Multi-thread Step 내에서 멀티 스레드로 Chunk 기반 처리가 이루어지는 구조다. TaskExecutorRepeatTemplate이 반복자로 사용된다. 설정한 개수만큼의 스레드를 생성하여 수행한다. ItemReader는 Thread-safe 인지 반드시 확인해야 한다. 데이터를 소스로부터 읽어오는 역할이기 때문에 스레드마다 중복해서 데이터를 읽어오지 않도록 동기화가 보장되어야한다. 스레드마다 새로운 Chunk가 할당되어 데이터 동기화가 보장된다. 스레드끼리 Chunk를 서로 공유하지 않는다. 예제코드 MultiThreadCustomer.java package com.project.springbatch._43_multiThread; import lombok.AllArgsConstr..