프레임워크(Framework)/Spring

[Spring Batch] 스프링 배치 간단한 Job 구현하고 실행하기 - Spring boot 2.x

잇트루 2023. 6. 15. 01:48
반응형
본 내용은 온라인 강의 사이트 인프런의 정수원 님의 강의 내용이 포함되어 있습니다.
스프링 배치 - Spring Boot 기반으로 개발하는 Spring Batch
 

스프링 배치 - Spring Boot 기반으로 개발하는 Spring Batch - 인프런 | 강의

초급에서 중~고급에 이르기까지 스프링 배치의 기본 개념부터 API 사용법과 내부 아키텍처 구조를 심도있게 다룹니다. 그리고 스프링 배치 각 기능의 흐름과 원리를 학습하게 되고 이를 바탕으

www.inflearn.com

 

 

스프링 배치 프로젝트 구성 및 환경 설정

아래 링크를 통해 스프링 배치를 실행하기 위한 프로젝트 생성 및 환경 설정을 수행하고 나면 간단한 스프링 배치 Job을 구성하여 실행할 수 있다.

https://ittrue.tistory.com/414

 

[Spring Batch] 스프링 배치 프로젝트 구성 및 환경 설정 - Spring boot 2.x

프로젝트 생성 Spring initializr IntelliJ IDEA Ultimate build.gradle 의존성 추가 프로젝트 생성 후 스프링 배치를 사용하기 위해 의존성을 추가한다. plugins { id 'java' id 'org.springframework.boot' version '2.7.12' id 'io.

ittrue.tistory.com

 

 

스프링 배치 시작하기

스프링 배치를 실행하기 위한 프로젝트 구성 및 환경 설정이 끝나면 간단한 스프링 배치 로직을 작성할 수 있다.

 

HelloJobConfiguration 작성하기

@Configuration
@RequiredArgsConstructor
public class HelloJobConfiguration { // Job 정의

    private final JobBuilderFactory jobBuilderFactory;
    private final StepBuilderFactory stepBuilderFactory;

    @Bean
    public Job helloJob() {
        return jobBuilderFactory.get("helloJob") // helloJob 생성
                .start(helloStep1()) // helloStep1 시작
                .next(helloStep2()) // helloStep1이 끝나면 시작
                .build();
    }

    @Bean
    public Step helloStep1() { // helloStep1 생성
        return stepBuilderFactory.get("helloStep1")
                .tasklet((contribution, chunkContext) -> {
                    System.out.println("==================");
                    System.out.println("step1 was executed");
                    System.out.println("==================");
                    return RepeatStatus.FINISHED;
                })
                .build();
    }

    @Bean
    public Step helloStep2() { // helloStep2 생성
        return stepBuilderFactory.get("helloStep2")
                .tasklet((contribution, chunkContext) -> {
                    System.out.println("==================");
                    System.out.println("step2 was executed");
                    System.out.println("==================");
                    return RepeatStatus.FINISHED;
                })
                .build();
    }
}

 

실행 결과

2023-06-15 01:22:54.144  INFO 10000 --- [           main] o.s.b.c.l.support.SimpleJobLauncher      : Job: [SimpleJob: [name=helloJob]] launched with the following parameters: [{}]
2023-06-15 01:22:54.172  INFO 10000 --- [           main] o.s.batch.core.job.SimpleStepHandler     : Executing step: [helloStep1]
==================
step1 was executed
==================
2023-06-15 01:22:54.183  INFO 10000 --- [           main] o.s.batch.core.step.AbstractStep         : Step: [helloStep1] executed in 11ms
2023-06-15 01:22:54.188  INFO 10000 --- [           main] o.s.batch.core.job.SimpleStepHandler     : Executing step: [helloStep2]
==================
step2 was executed
==================
2023-06-15 01:22:54.192  INFO 10000 --- [           main] o.s.batch.core.step.AbstractStep         : Step: [helloStep2] executed in 3ms
2023-06-15 01:22:54.195  INFO 10000 --- [           main] o.s.b.c.l.support.SimpleJobLauncher      : Job: [SimpleJob: [name=helloJob]] completed with the following parameters: [{}] and the following status: [COMPLETED] in 35ms

 

Job 구성 및 실행

  1. @Configuration 선언 : 하나의 배치 Job을 정의하고 빈 설정
  2. JobBuilderFactory : Job을 생성하는 빌더 팩토리
  3. StepBuilderFactory : Step을 생성하는 빌더 팩토리
  4. Job : helloJob 이름으로 Job 생성
  5. Step : helloStep 이름으로 Step 생성
  6. tasklet : Step 안에서 단일 태스크로 수행되는 로직 구현
  7. Job 구동 → Step 실행 → Tasklet 실행

 

 

Job, Step, Tasklet

Job이 구동되면 Step을 실행하고 Step이 구동되면 Tasklet을 실행하도록 구성된다.

Job

Job은 하나의 일, 일감으로 여러 가지의 Step을 가질 수 있으며, 각 Step이 순차적으로 실행된다.

 

Step

Step은 일의 항목, 단계를 의미하며 Step 안에 구현된 Tasklet을 실행한다.

 

Tasklet

Tasklet은 실제 작업 내용으로 각 Step 별로 실행할 비즈니스 로직이 구현되어 있다.

반응형