The definitive guide to Spring Batch 정리

introduction

  • Batch SW, 4 가지 요구사항
    • usablility: 쉽게 유지보수 / 에러처리 가능
    • scalability: 높은 트랜잭션 처리 가능
    • availability: 장애 없음
    • security: 데이터의 안전한 보호
  • 작업 계층
    • Job - Step - Tasklet
    • tasklet step: 간단한 Tasklet 몇개를 연달아 실행함
    • chunk-based step: ItemReader, ItemProcessor, ItemWriter로 나눠서 실행
    • 3개 계층 모두 spring bean임 (Singleton)
  • 실행 계층 & 레퍼지토리
    • Job - JobInstance - JobExecution - StepExecution
    • Job: Unique, 순차 실행한 Step들의 list
    • JobInstance: 한 번의 실행 내에서 유효, 실패한 이후의 실행에도 재사용됨
    • JobExecution: 한번의 실행 자체를 의미, 실패한 이후의 실행에는 재생성됨
    • StepExecution: 각 step의 실행 자체를 의미
    • job repository: 각 job의 실행에 따른 모든 상태 정보가 저장됨

병렬 / 분산

  • Chunk 단위 병렬화
    • Item을 Chunk 단위로 쪼개서 읽고,처리한 뒤, 마지막에 한꺼번에 쓴다(commit)
    • 여러개의 Chunk를 병렬로 처리
    • Step 안에서 진행됨
  • Step 단위 병렬화
    • 여러개의 비 의존적 step을 병렬로 처리
  • Remote Chunking
    • ItemProcessor 부분을 분산처리 slave에서 처리
    • Chunk 단위로 Slave로 보낼 커뮤니케이션 수단 필요 (i.e. 카프카)
    • IO는 모두 마스터가 함
  • Partitioning
    • 마스터는 데이터를 나누기만 함 - partition 혹은 chunk
    • slave는 read, process, write 전 과정을 분산처리
    • Spring batch가 통신과정을 지원하므로 커뮤니케이션 수단 불필요

Basics

  • @EnableBatchProcessing
    • 일반적으로 Application에 붙임
    • Factory, Launcher, Repository 등 각종 도구를 주입 해줌
  • factories: JobBuilderFactory, jobBuilderFactory

job parameter

  • 특징
    • 같은 파라미터로는 하나의 JobInstance만 존재
    • cmdline에 key-value로 전달, 환경변수/Spring파라미터와 다르므로 구분할 것
    • jobInstance - 파라미터 간의 관계가 JobRepository에 저장됨
  • 접근 방법
    • tasklet 안에서 ChunkContext를 통해서 접근
    • Spring을 통한 Late-binding