본문 바로가기

batch9

[SpringBatch] 멀티쓰레드 Step 멀티쓰레드 Step TOCHE 프로젝트를 진행하면서 대용량 배치 처리를 해야하는 일이 생겼다. 기존의 배치는 chunk 기반의 단순한 배치이다. private Step useDeckStatsStep() { return stepBuilderFactory.get("useDeckStatsStep") .chunk(chunkSize) .reader(useDeckStatsReader()) .processor(useDeckStatsProcessor) .writer(useDeckStatsWriter()) .build(); } 위와 같은 Step을 10개의 쓰레드를 이용해 멀티쓰레드 환경으로 실행해야 했다. private final int poolSize = 10; ... private Step useDeckStatsS.. 2022. 7. 2.
[Spring Batch] @JobScope와 @StepScope @JobScope와 @StepScope Scope란? 스프링 컨테이너에서 빈이 관리되는 범위 singleton, prototype, request, session, application이 있으며 기본은 singleton으로 생성된다. 스프링 배치 스코프 @JobScope, @StepScope @Bean @JobScope public Step step1(@Value("#{jobParameters['message']}") String message) { return stepBuilderFactory.get("step1") .tasklet(tasklet1(null)) .build(); } @Bean @StepScope public Tasklet tasklet1( @Value("#{jobExecutionCont.. 2022. 5. 28.
[Spring Batch] 스프링 배치 실행 - Flow 스프링 배치의 실행 - Flow FlowJob @Bean public Job batchJob() { return jobBuilderFactory.get("batchJob") .start(step1()) // step1이 성공한다면 step3 실행 .on("COMPLETED").to(step3()) // step1이 실패한다면 step2 실행 .from(step1()) .on("FAILED").to(step2()) .end() .build(); } Step을 순차적으로만 구성하는 것이 아닌 상태에 따라 흐름을 전환하도록 구성할 수 있으며 FlowJobBuilder에 의해 생성된다. Step이 실패하더라도 Job은 실패로 끝나지 않도록 해야 하는 경우 Step이 성공했을 때 다음에 실행해야 할 Step을 구.. 2022. 5. 28.
[Spring Batch] 스프링 배치 실행 - Step 스프링 배치 실행 - Step StepBuilderFactory @Bean public Step step1() { return stepBuilderFactory.get("step1") .tasklet((contribution, chunkContext) -> { System.out.println("step1 has executed"); return RepeatStatus.FINISHED; }) .build(); } StepBuilder를 생성하는 팩토리 클래스, get(String name) 메서드를 제공한다. StepBuidler Step을 구성하는 설정 조건에 따라 다섯개의 하위 빌더 클래스를 생성하고, Step 생성을 위임한다. TaskletStepBuilder TaskletStep을 생성하는 기본 .. 2022. 5. 28.
[Spring Batch] 스프링 배치 실행 - Job 스프링 배치의 실행 - Job JobBuilderFactory @Bean public Job job2() { return jobBuilderFactory.get("job2") .start(step1()) .build(); } JobBuilder를 생성하는 팩토리 클래스로서 get(String name)메서드를 제공한다. 위와 같이 get 메서드의 인자에 들어가는 String 값이 Job의 이름이 된다. JobBuilder @Bean public Flow flow() { FlowBuilder flowBuilder = new FlowBuilder("flow"); flowBuilder .start(step3()) .next(step4()) .end(); return flowBuilder.build(); } J.. 2022. 5. 28.
[Spring Batch] 스프링 배치 도메인 - Step, 나머지 스프링 배치의 도메인 - Step, 나머지 Step 스프링 배치에서 Step이란 Job을 구성하는 하나의 단계로, 실제 배치가 실행되는 처리를 정의하고 컨트롤하는데 필요한 모든 정보를 가지고 있는 도메인 객체이다. 배치 작업을 어떻게 구성하고 실행할 것인지 Job의 세부 작업을 Task 기반으로 설정하고 명세해 놓은 객체이다. 단순한 단인 테스크부터 입력, 처리, 출력과 관련된 비즈니스 로직을 포함하는 모든 설정을 담고 있다. 모든 Job은 하나 이상의 Step으로 구성된다. Step의 기본 구현체 TaskletStep: 가장 기본이 되는 클래스, Tasklet 타입의 구현체들을 제어한다. PartitionStep: 멀티 스레드 방식으로 Step을 여러 개로 분리해서 실행한다. JobStep: Step .. 2022. 5. 28.
[Spring Batch] 스프링 배치 도메인 - Job 스프링 배치의 도메인 - Job Job Job이란? 스프링 배치의 하나의 배치를 뜻한다. 예) API 서버의 접속 로그 데이터를 통계 서버로 옮기는 배치 - Job Configuration을 통해서 생성되는 객체 단위로, 배치를 어떻게 구성하고 실행할 것인지 전체적으로 설정하고 명세해 좋은 객체이다. 배치 Job을 구성하기 위한 최상위 인터페이스이며, 스프링 배치가 기본 구현체(org.springframework.batch.core.Job)를 제공한다. 여러 Step을 포함하고 있는 컨테이너로 반드시 한개 이상의 Step으로 구성해야 한다. SimpleJob 순차적으로 Step을 실행시키는 Job FlowJob 특정한 조건과 흐름에 따라 Step을 구성하여 실행시키는 Job Flow 객체를 실행시켜서 작.. 2022. 5. 28.
[Spring Batch] 스프링 배치의 DB 스키마 스프링 배치의 DB 스키마 스프링 배치는 DB에 메타데이터를 저장하고, 관리한다. 스프링 배치 메타 데이터 스프링 배치의 실행 및 관리를 위한 목적으로 여러 도메인들(Job, Step, JobParameters 등)의 정보들을 저장, 업데이트, 조회할 수 있는 스키마를 제공한다. 과거와 현재의 실행에 대한 세세한 정보, 실행에 대한 성공과 실패 여부 등을 일목요연하게 관리함으로써 배치운용에 있어 리스크 발생시에 빠르게 대처할 수 있다. DB와 연동할 경우 필수적으로 메타 테이블이 생성 되어야 한다. DB 스키마 제공 /org/springframework/batch/core/ 디렉토리에 schema-??.sql형식으로 DB유형별 기본 DB 스키마가 제공된다. 스키마 생성 설정 스키마 생성 방법 수동 생성 .. 2022. 5. 18.
[Spring Batch] 스프링 배치와 구성 스프링 배치와 구성 모든 프로그램에는 Batch가 거의 필수적인 요소이다. 따라서 Spring에서 제공하는 Spring Batch를 학습하게 되었다. 스프링 배치가 탄생한 이유 스프링 배치는 자바기반 표준 배치 기술의 부재에서 시작되었다. 배치 처리에서 요구하는 재사용 가능한 자바 기반 배치 아키텍처 표준의 필요성이 대두되면서 만들어졌다. 배치 핵심 패턴 배치의 핵심적인 패턴은 Read, Process, Write로 구성되어 있다. Read: 데이터베이스, 파일, 큐에서 다량의 데이터를 조회한다. Process: 특정 방법으로 데이터를 가공한다. Write: 데이터를 수정된 양식으로 다시 저장한다. 배치 시나리오 배치 프로세스를 주기적으로 커밋 동시 다발적인 Job의 배치 처리, 대용량 병렬 처리 실패 .. 2022. 5. 18.