Spring Batch 02

유요한·2024년 1월 15일

Spring Batch

목록 보기
2/2
post-thumbnail

시작하기

  1. @Configuration 선언
    • 하나의 배치 Job 을 정의하고 빈 설정

  2. JobBuilderFactory
    • Job 을 생성하는 빌더 팩토리

  3. StepBuilderFactory
    • Step 을 생성하는 빌더 팩토리

  4. Job
    • helloJob 이름으로 Job 생성

  5. Step
    • helloStep 이름으로 Step 생성

  6. tasklet
    • Step 안에서 단일 태스크로 수행되는 로직 구현

  7. Job 구동 -> Step 을 실행 -> Taskelt 을 실행

package com.example.batch1.batch.job.api;

import lombok.RequiredArgsConstructor;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@RequiredArgsConstructor
public class HelloJobConfiguration {
    private final JobBuilderFactory jobBuilderFactory;
    private final StepBuilderFactory stepBuilderFactory;

    @Qualifier("helloJobApi")
    @Bean
    public Job helloJob() {
        return jobBuilderFactory.get("helloJob")
                .start(helloStep1())
                .next(helloStep2())
                .build();
    }

    public Step helloStep1() {
        return stepBuilderFactory.get("helloStep1")
                .tasklet(new Tasklet() {
                    @Override
                    public RepeatStatus execute(StepContribution contribution,
                                                ChunkContext chunkContext) throws Exception {
                        System.out.println("===============");
                        System.out.println("Hello Batch!!");
                        System.out.println("===============");
                        return RepeatStatus.FINISHED;
                    }
                }).build();
    }

    public Step helloStep2() {
        return stepBuilderFactory.get("helloStep2")
                .tasklet(new Tasklet() {
                    @Override
                    public RepeatStatus execute(StepContribution contribution,
                                                ChunkContext chunkContext) throws Exception {
                        System.out.println("===============");
                        System.out.println("Hello Batch2!!");
                        System.out.println("===============");
                        return RepeatStatus.FINISHED;
                    }
                }).build();
    }
}

  1. 스프링 배치 메타 데이터
    • 스프링 배치의 실행 및 관리를 위한 목적으로 여러 도메인들(Job, Step, JobParameters..) 의 정보들을 저장, 업데이트, 조회할 수 있는 스키마 제공
    • 과거, 현재의 실행에 대한 세세한 정보, 실행에 대한 성공과 실패 여부 등을 일목요연하게 관리함으로서 배치운용에 있어 리스크 발생시 빠른 대처 가능
    • DB 와 연동할 경우 필수적으로 메타 테이블이 생성 되어야 함
  2. DB 스키마 제공
    • 파일 위치 : /org/springframework/batch/core/schema-*.sql
    • DB 유형별로 제공
  3. 스키마 생성 설정
    • 수동 생성 – 쿼리 복사 후 직접 실행
    • 자동 생성 - spring.batch.jdbc.initialize-schema 설정
    • ALWAYS
      • 스크립트 항상 실행
      • RDBMS 설정이 되어 있을 경우 내장 DB 보다 우선적으로 실행
    • EMBEDDED : 내장 DB일 때만 실행되며 스키마가 자동 생성됨, 기본값
    • NEVER
      • 스크립트 항상 실행 안함
      • 내장 DB 일경우 스크립트가 생성이 안되기 때문에 오류 발생
      • 운영에서 수동으로 스크립트 생성 후 설정하는 것을 권장

profile
발전하기 위한 공부

0개의 댓글