Spring Batch
  • 들어가며 간단한 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..

    Read more
  • 들어가며 간단한 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..

    Read more
  • 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 타입의 파..

    Read more
  • 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..

    Read more
  • 목표 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..

    Read more
  • 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..

    Read more
  • 예제 파일 생성 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..

    Read more
  • @SpringBatchTest 자동으로 ApplicationContext에 테스트에 필요한 여러 유틸 Bean을 등록해주는 어노테이션 클래스 설명 JobLauncherTestUtils launcJob(), launchStep()과 같은 스프링 배치 테스트에 필요한 유틸성 메서드를 지원한다. JobRepositoryTestUtils JobRepository를 사용해서 JobExecution을 생성 및 삭제 기능 메서드를 지원한다. StepScopeTestExecutionListener @StepScope 컨텍스트를 생성해준다. 해당 컨텍스트를 통해 JobParameter 등을 단위 테스트에서 DI 받을 수 있다. JobScopeTestExecutionListener @JobScope 컨텍스트를 생성해준다...

    Read more
  • 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 ..

    Read more
  • 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; ..

    Read more
  • 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..

    Read more
  • 스프링배치 Multi-thread Step 내에서 멀티 스레드로 Chunk 기반 처리가 이루어지는 구조다. TaskExecutorRepeatTemplate이 반복자로 사용된다. 설정한 개수만큼의 스레드를 생성하여 수행한다. ItemReader는 Thread-safe 인지 반드시 확인해야 한다. 데이터를 소스로부터 읽어오는 역할이기 때문에 스레드마다 중복해서 데이터를 읽어오지 않도록 동기화가 보장되어야한다. 스레드마다 새로운 Chunk가 할당되어 데이터 동기화가 보장된다. 스레드끼리 Chunk를 서로 공유하지 않는다. 예제코드 MultiThreadCustomer.java package com.project.springbatch._43_multiThread; import lombok.AllArgsConstr..

    Read more
  • 단일스레드 vs 멀티스레드 단일 스레드 : 프로세스 내 특정 작업을 처리하는 스레드가 하나인 경우 멀티 스레드 : 프로세스 내 특정 작업을 처리하는 스레드가 여러개인 경우 작업 처리에 있어서 단일 스레드와 멀티 스레드의 선택 기준은 "어떤 방식이 자원을 효율적으로 사용하고 성능 처리에 유연한가" 이다. 일반적으로 복잡한 처리나 대용량 데이터를 다루는 작업일 경우 전체 소요 시간 및 성능상의 이점을 가져오기 위해 멀티 스레드 방식을 선택한다. 멀티 스레드 처리 방식은 데이터 동기화 이슈가 존재하기 때문에 최대한 고려해서 결정해야한다. 스프링 배치 스레드 모델 스프링 배치는 기본적으로 단일 스레드 방식으로 작업을 처리한다. 성능 향상과 대규모 데이터 작업을 위한 비동기 처리 및 Scale out 기능을 제공..

    Read more
  • ItemReaderAdapter SpringBatch에서 Job 안에 이미 있는 DAO나 다른 서비스를 ItemReader 안에서 사용하고자 할 때 위임 역할을 한다. Adapter 패턴을 도입하여 지정한 서비스를 호출하도록 한다. Job 생성 ItemReaderAdapterConfiguration.java package com.project.springbatch._57_readerAdapter; import lombok.RequiredArgsConstructor; import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; import org.springframework.batch.core.configurat..

    Read more
  • Paging 방식 페이징 단위로 데이터를 조회하는 방식으로 Page Size만큼 한번에 메모리로 가지고 온 다음 한개씩 읽는다. 한 페이지를 읽을때마다 Connection을 맺고 끊기 때문에 대량의 데이터를 처리하더라도 SocketTimeout 예외가 거의 발생하지 않는다. 시작 행 번호를 지정하고 페이지에 반환시키고자 하는 행의 수를 지정한 후 사용한다. (offset-limit) 페이징 단위의 결괌나 메모리에 할당하기 때문에 메모리 사용량이 적다. Connection 연결 유지 기간이 길지 않고 메모리 공간을 효율적으로 새용해야하는 데이터 처리에 적합하다. JdbcPagingItemReader Paging 기반의 JDBC 구현체로써, 쿼리에 시작 행 번호(offset)와 페이지에서 반환할 행수(lim..

    Read more
  • Copyright 2024. GRAVITY all rights reserved