Spring Batch 간단 실습

최준호·2022년 1월 13일
0

Spring Batch

목록 보기
2/10

👊 Spring Boot로 시작

spring initializr에서 Spring Boot 프로젝트를 먼저 생성한다.

우선 회사의 현재 환경에 맞춰서 생성해야 하므로

  1. Batch
  2. Quartz (=스케줄러)
  3. Lombok
  4. MyBatis
  5. H2 (= 테스트용)
  6. MySQL (= 회사 DB)

로 프로젝트를 생성해보자.

🔨 프로젝트 설정

프로젝트의 압축을 풀어서 intellij로 열었다.

batch 설정

@EnableBatchProcessing	//배치 활성화
@SpringBootApplication
public class CreshBatchApplication {
	public static void main(String[] args) {
		SpringApplication.run(CreshBatchApplication.class, args);
	}
}

@EnableBatchProcessing 어노테이션을 적용하여 Spring Batch 프로그램을 활성화 한다.

🎹 간단한 batch 실습

@Slf4j
@RequiredArgsConstructor
@Configuration  //Spring에 설정 파일이라는 선언
public class TestJob {

    private final JobBuilderFactory jobBuilderFactory;
    private final StepBuilderFactory stepBuilderFactory;

    @Bean
    public Job simpleJob() {
        return jobBuilderFactory.get("simpleJob")   //(1) simpleJob 이름으로 batch job을 생성
                .start(simpleStep1())               //(2) simpleStep1 method Step을 실행
                .build();
    }

    @Bean
    public Step simpleStep1() {
        return stepBuilderFactory.get("simpleStep1")        //(3) simpleStep1 batch step을 생성
                .tasklet((contribution, chunkContext) -> {  //(4) step 안에서 수행될 기능들을 명시, tasklet은 step 안에서 단일로 수행될 커스텀한 기능을 선언할 때 사용
                    log.info(contribution.toString());
                    log.info(chunkContext.toString());
                    log.info(">>>>> This is Step1");
                    return RepeatStatus.FINISHED;           //(5) batch가 성공적으로 수행되고 종료됨을 반환
                })
                .build();
    }
}

프로젝트에 jobs 패키지를 만들어 TestJob.class를 만들고 다음과 같은 코드를 작성해서 결과 값을 봐보자.

  1. simpleJob이란 이름으로 batch job을 생성한다.
  2. Step으로 정의된 simpleStep1을 실행시킨다.
  3. simpleStep1이란 이름으로 batch step을 생성한다.
  4. tasklet으로 step 안에서 수행될 기능들을 명시해놓음
    • tasklet은 step 안에서 단일로 수행될 커스텀한 기능을 선언할 때 사용된다.
    • tasklet 외에는 reader, processor, writer의 묶음으로 실행하는 방법이 있다.
  5. batch가 성공적으로 수행되고 종료됨을 반환한다.

실행된 로그를 봐보면

  1. Job에 simpleJob이란 이름으로 job이 등록
  2. simtepStep1을 excute
  3. This is Step1 출력
  4. impleStep1의 실행 시간 출력
  5. 실행된 Job이 정상실행되었고 실행된 Job에 대한 정보 출력

으로 종료되었음을 알수 있다.


이미지 출처 : https://juneyr.dev/2019-07-24/spring-batch-tasklet

tasklet과 {reader, processor, writer}의 묶음을 비교하면 tasklet은 한번에 모두 처리가 끝난다고 생각하면 될거 같고 묶음은 읽고, 로직 진행, 쓰기로 나눠서 작업한다고 생각하면 될거 같다. 그리고 중요한 것은 두개의 방법 중 step을 작성할땐 한가지 방법으로만 작성해야한다는 점이다.

참고글
향로님 batch 가이드 최고
스프링 배치 튜토리얼
h2 세팅과 파일작성
batch+Scheduler 구현

profile
코딩을 깔끔하게 하고 싶어하는 초보 개발자 (편하게 글을 쓰기위해 반말체를 사용하고 있습니다! 양해 부탁드려요!) 현재 KakaoVX 근무중입니다!

0개의 댓글