Programing/Spring Batch

Spring Batch 기본 예제

딩코딩 2023. 8. 28. 14:51

가장 기초적인 예제 코드로 아래 코드를 작성 후 배치 프로젝트를 실행하면 Job이 실행된다.

하나의 Job에는 여러개의 Step이 등록되어 있고. 순서대로 Step1 -> Step2가 실행될것이다.

Job, Step 등록하기

package io.spring.springbatch;

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.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@RequiredArgsConstructor
public class HelloJobConfiguration {

    private final JobBuilderFactory jobBulderFactory;
    private final StepBuilderFactory stepBulderFactory;

    @Bean
    public Job helloJob(){ //Job을 생성한다.
        return jobBulderFactory.get("helloJob")
                .start(helloStep1()) //하나의 Job에는 여러개의 Step을 구성할 수 있다.
                .next(helloStep2())
                .build();
    }


    @Bean
    public Step helloStep1() { //Step을 생성한다.
        return stepBulderFactory.get("helloStep1")
                .tasklet(new Tasklet() {
                    @Override // 로직 작성
                    public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {

                        System.out.println("==================="); 
                        System.out.println(" >> Hello Spring Batch!!");
                        System.out.println("===================");

                        return RepeatStatus.FINISHED; // 한번 실행 후 멈추는 용도. null이면 무한반복임
                    }
                })
                .build();
    }

    @Bean
    public Step helloStep2() {
        return stepBulderFactory.get("helloStep2")
                .tasklet(new Tasklet() {
                    @Override
                    public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {

                        System.out.println("===================");
                        System.out.println(" >> step2 was executed");
                        System.out.println("===================");

                        return RepeatStatus.FINISHED; // 한번 실행 후 멈추는 용도. null이면 무한반복임
                    }
                })
                .build();    }

}

 

실행결과

배치가 실행된 모습