Spring Batch, 배치와 스케줄러의 차이, Job, Tasklet, Chunk

2023. 12. 26. 11:02·Spring
목차
  1. 배치
  2. 배치와 스케줄러의 차이
  3. Job, Tasklet, Chunk
  4. Demo
  5. 실행 결과
  6. Batch 스키마 설정, 메타 데이터
728x90

배치

배치는 실시간으로 처리하는것이 아닌 처리할 작업물들을 모아 한번에 처리하는 것

예를들어 1년간 접속하지않은 모든 회원들을 휴먼계정으로 처리하는 등 일반적인 비즈니스로직이 아닌 상황에 대해서 처리해주는 프로세스

 

배치와 스케줄러의 차이

배치 스캐쥴러
일괄 처리 정해진 시간에 자동으로 실행
사용자의 명령이 있을 때 실행 주기적으로 실행
Batch Job을 관리(Job을 구동하거나 실행시키는 기능 X )  

 

Job, Tasklet, Chunk

Job

  • 배치 처리 과정을 하나의 단위로 만든 객체
  • 배치 처리 과정에 있어 전체 계층의 최상단에 위치
  • 1개 이상의 Step을 가짐
  • Job 안에는 여러 개의 Step이 존재하고, Step 안에는 Tasklet 또는 {Reader, Processor, Writer} 묶음이 존재

Tasklet vs Chunk

  • 실제 처리 로직이 들어가 있는 빈
  • 스프링배치에 처리를 하는 방식은 크게 Chunk 방식과 Tasklet 방식으로 나눌수 있음

Chunk

  • Chunk 방식은 세가지 클래스 빈ItemReader, ItemProcessor, ItemWriter를 구현
  • 이미 스프링 배치에서 작성해놓은 클래스들이 있어 그것을 이용

Tasklet

  • Tasklet 인터페이스를 구현해 execute 함수를 오버라이딩 하고 개발자가 직접 작성
  • execute 함수 안에 하고자 하는 기능을 넣어주면 됨

Demo

@Slf4j
@Configuration
public class SimpleJobConfiguration {

    /*
    Spring Batch에서 Job은 하나의 배치 작업 단위를 말합니다.
    Job 안에서는 이처럼 여러 Step이 존재하고,
    Step 안에는 Tasklet 혹은 Reader & Processor & Writer 묶음이 존재합니다.
     */

  @Bean
  public Job testSimpleJob(JobRepository jobRepository, Step testStep, Step testStep2){
    return new JobBuilder("testSimpleJob", jobRepository)
      .start(testStep)
      .next(testStep2)
      .build();
  }

  @Bean
  public Step testStep(JobRepository jobRepository, Tasklet testTasklet, PlatformTransactionManager platformTransactionManager){
    return new StepBuilder("testStep", jobRepository)
      .tasklet(testTasklet, platformTransactionManager).build();
  }
  @Bean
  public Step testStep2(JobRepository jobRepository, Tasklet testTasklet, PlatformTransactionManager platformTransactionManager){
    return new StepBuilder("testStep2", jobRepository)
      .tasklet(testTasklet, platformTransactionManager).build();
  }

  @Bean
  public Tasklet testTasklet(){
    return ((contribution, chunkContext) -> {
      System.out.println("테스트1");
      return RepeatStatus.FINISHED;
    });
  }
}

실행 결과

2023-11-20T14:48:42.083+09:00  INFO 11224 --- [           main] o.s.b.c.l.support.SimpleJobLauncher      : Job: [SimpleJob: [name=testSimpleJob]] launched with the following parameters: [{}]
2023-11-20T14:48:42.098+09:00  INFO 11224 --- [           main] o.s.batch.core.job.SimpleStepHandler     : Executing step: [testStep]
테스트1
2023-11-20T14:48:42.106+09:00  INFO 11224 --- [           main] o.s.batch.core.step.AbstractStep         : Step: [testStep] executed in 8ms
2023-11-20T14:48:42.109+09:00  INFO 11224 --- [           main] o.s.batch.core.job.SimpleStepHandler     : Executing step: [testStep2]
테스트1
2023-11-20T14:48:42.111+09:00  INFO 11224 --- [           main] o.s.batch.core.step.AbstractStep         : Step: [testStep2] executed in 1ms
2023-11-20T14:48:42.113+09:00  INFO 11224 --- [           main] o.s.b.c.l.support.SimpleJobLauncher      : Job: [SimpleJob: [name=testSimpleJob]] completed with the following parameters: [{}] and the following status: [COMPLETED] in 23ms

Batch 스키마 설정, 메타 데이터

  • 이전에 실행한 Job이 어떤 것들이 있는지
  • 최근 실패한 Batch Parameter가 어떤 것들이 있고, 성공한 Job은 어떤 것들이 있는지
  • 다시 실행하면 어디서부터 다시 실행해야하는지
  • 어떤 Job에 어떤 Step들이 있고, Step들 중에서도 성공한 Step이 무엇이고 실패한 Step은 무엇이 있는지

 

728x90
  1. 배치
  2. 배치와 스케줄러의 차이
  3. Job, Tasklet, Chunk
  4. Demo
  5. 실행 결과
  6. Batch 스키마 설정, 메타 데이터
'Spring' 카테고리의 다른 글
  • [Spring Webflux] WebClient (HTTP 클라이언트)
  • Spring Event, 스프링 이벤트, ApplicationEventPublisher
  • Spring Jsch SSH Private Key, Dockerfile 복사, Jsch kubernetes pod
  • Spring Jsch java ssh 접속
Karla Ko
Karla Ko
𝘾𝙤𝙣𝙩𝙞𝙣𝙪𝙤𝙪𝙨𝙡𝙮 𝙄𝙢𝙥𝙧𝙤𝙫𝙞𝙣𝙜, 𝘾𝙤𝙣𝙨𝙩𝙖𝙣𝙩𝙡𝙮 𝘿𝙚𝙫𝙚𝙡𝙤𝙥𝙞𝙣𝙜 𝙔𝙚𝙨!
    250x250
  • Karla Ko
    karlaLog
    Karla Ko
  • 전체
    오늘
    어제
    • Total (467)
      • Spring (19)
      • JPA (4)
      • Cloud & Architecture (15)
        • Kubernetes (5)
        • Docker (3)
        • MSA (2)
        • GCP (1)
        • AWS (4)
      • Devops (1)
      • Message Queue (4)
        • Kafka (2)
        • RabbitMQ (2)
      • Git (4)
      • DB (4)
      • Java (9)
      • Python (4)
      • CS (11)
        • OS (8)
        • Network (2)
        • Algorithm (1)
      • Coding Test (392)
        • programmers (156)
        • Graph (43)
        • DP (37)
        • Search (31)
        • Tree (13)
        • Data Structure (26)
        • Combination (12)
        • Implement (18)
        • Geedy (23)
        • Sort (7)
        • Math (21)
        • geometry (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    덱
    큐
    BFS
    구현
    재귀
    자료구조
    힙
    정렬
    조합
    DFS
    프로그래머스
    스택
    백준
    Algorithm
    월간코드챌린지
    LIS
    플로이드워셜
    그리디
    최소신장트리
    다익스트라
    그래프
    알고리즘
    최단거리
    이분탐색
    DP
    동적계획법
    트리
    파이썬
    최대공약수
    구간합
  • hELLO· Designed By정상우.v4.10.3
Karla Ko
Spring Batch, 배치와 스케줄러의 차이, Job, Tasklet, Chunk
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.