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..
단일스레드 vs 멀티스레드 단일 스레드 : 프로세스 내 특정 작업을 처리하는 스레드가 하나인 경우 멀티 스레드 : 프로세스 내 특정 작업을 처리하는 스레드가 여러개인 경우 작업 처리에 있어서 단일 스레드와 멀티 스레드의 선택 기준은 "어떤 방식이 자원을 효율적으로 사용하고 성능 처리에 유연한가" 이다. 일반적으로 복잡한 처리나 대용량 데이터를 다루는 작업일 경우 전체 소요 시간 및 성능상의 이점을 가져오기 위해 멀티 스레드 방식을 선택한다. 멀티 스레드 처리 방식은 데이터 동기화 이슈가 존재하기 때문에 최대한 고려해서 결정해야한다. 스프링 배치 스레드 모델 스프링 배치는 기본적으로 단일 스레드 방식으로 작업을 처리한다. 성능 향상과 대규모 데이터 작업을 위한 비동기 처리 및 Scale out 기능을 제공..
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..
Paging 방식 페이징 단위로 데이터를 조회하는 방식으로 Page Size만큼 한번에 메모리로 가지고 온 다음 한개씩 읽는다. 한 페이지를 읽을때마다 Connection을 맺고 끊기 때문에 대량의 데이터를 처리하더라도 SocketTimeout 예외가 거의 발생하지 않는다. 시작 행 번호를 지정하고 페이지에 반환시키고자 하는 행의 수를 지정한 후 사용한다. (offset-limit) 페이징 단위의 결괌나 메모리에 할당하기 때문에 메모리 사용량이 적다. Connection 연결 유지 기간이 길지 않고 메모리 공간을 효율적으로 새용해야하는 데이터 처리에 적합하다. JdbcPagingItemReader Paging 기반의 JDBC 구현체로써, 쿼리에 시작 행 번호(offset)와 페이지에서 반환할 행수(lim..
Xml 파일 읽어오기 resources/item51/customer.xml 1 hong gil dong1 40 2 hong gil dong2 42 3 hong gil dong3 43 Customer.java package com.project.springbatch._52_reader_json; import lombok.AllArgsConstructor; import lombok.Data; @Data @AllArgsConstructor public class Customer { private final long id; private final String name; private final int age; } build.gradle implementation 'org.springframework:sprin..
Job 생성 FlatFileConfiguration.java package com.project.springbatch._47_reader_FlatFiles; import lombok.RequiredArgsConstructor; import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; import org.springfr..
Job 생성 ItemStreamConfiguration.java package com.project.springbatch._41_itemStream; import com.project.springbatch._41_itemStream.custom.CustomItemStreamReader; import com.project.springbatch._41_itemStream.custom.CustomItemStreamWriter; import lombok.RequiredArgsConstructor; import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; import org.springframework.batch.c..
기존 구현체 사용 스프링 배치는 동일한 JobParameters 로는 성공한 Job의 재실행이 불가능하다고 했다. 하지만 Job을 여러번 수행시켜야하는 경우도 있으므로 해당 경우에 incrementer()을 사용한다. 기존 구현체인 RunIdIncrementer() 을 사용할 경우 run.id 를 key 값으로 value 가 1씩 증가하여 Job이 실행된다. 계속적으로 증가되는 파라미터가 존재하므로 다른 파라미터 값들은 동일하도 JobParameters 가 다르게 인식되어 재실행이 가능해진다. IncrementerConfiguration.java package com.spring.batch.job; import com.spring.batch.job.incrementer.CustomJobParameters..
들어가기전 지난 포스팅에서 JobExecution에 대해 알아보았다. 이를 먼저 인지한 후 StepExecution에 대해 알아보자. https://devfunny.tistory.com/680?category=820618 SpringBatch 에서 JobInstance, JobExecution 의 관계 들어가기전 JobInstance, JobExecution 의 개념은 알고가자. https://devfunny.tistory.com/476?category=820618 [스프링배치] 잡의 실행 (JobLauncher, JobInstance, JobExecution, JobParameters) 잡의 실행 잡.. devfunny.tistory.com 예제코드 StepExecutionConfiguration.ja..
들어가기전 JobInstance, JobExecution 의 개념은 알고가자. https://devfunny.tistory.com/476?category=820618 [스프링배치] 잡의 실행 (JobLauncher, JobInstance, JobExecution, JobParameters) 잡의 실행 잡의 실행은 잡 러너 (Job Runner) 에서 시작된다. 잡 러너는 잡 이름과 여러 파라미터를 받아, 잡을 실행시킨다. 스프링 배치는 2가지 잡 러너를 제공한다. 1) CommandLineJobRunner 스크립트를 devfunny.tistory.com 예제코드 JobExecutionConfiguration package com.spring.batch.job; import lombok.RequiredAr..