IT/Live Coding

[springBoot] spring batch flowJob (테스트 영상 & 소스코드 포함)

알 수 없는 사용자 2023. 11. 18.

아래 포스팅에서 이어진 내용입니다.

 

[springBoot] spring batch jsonFileItemWriter

목차 아래 포스팅에서 이어진 내용입니다. [springBoot] spring batch FlatFileItemWriter 목차 아래 포스팅에서 이어진 내용입니다. [springBoot] spring batch step startLimit 아래 포스팅에서 이어진 내용입니다. [spri...

yaga.tistory.com


[springBoot] spring batch flowJob (테스트 영상 & 소스코드 포함)

spring batch simpleFlowJob 예제(조건에 따른 flow처리)

jobTestConfig 🤗

package com.dev.lsy.springbatchremind.batch;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.launch.support.RunIdIncrementer;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Slf4j
@RequiredArgsConstructor
@Configuration
public class JobTestConfig {

    private final JobBuilderFactory jobBuilderFactory;
    private final StepBuilderFactory stepBuilderFactory;

    @Bean
    //job
    public Job job1() {
        return jobBuilderFactory.get("job1")
                //jobParameter 자동 증감
                .incrementer(new RunIdIncrementer())
                .start(step1())
                    //step1의 상태가 실패로 끝나면 
                    .on("FAILED")
                    //스텝2로 가라
                    .to(step2())
                    //스텝2가 실패면
                    .on("FAILED")
                    //flow를 멈춘다.                        
                    .stop()
                //위에서 정의한 step1의 추가내용을 설정
                .from(step1())
                    //step1이 만일 실패가 아닌 모든 경우(실패는 위에서 정의 했으니 여기서의 *는 실패를 제외한 모든 경우가 된다.)
                    .on("*")
                    //스텝3으로 가라
                    .to(step3())
                    //그리고 스텝3이 성공하면 스텝 4로 가라
                    .next(step4())
                //스텝2를 재정의하네
                .from(step2())
                    //스텝2가 실패가 아닌 모든 경우의 경우                        
                    .on("*")
                    //스텝5로 가라
                    .to(step5())
                //최종적으로 flow를 종료해라
                .end()
                .build();
    }

    @Bean
    //step
    public Step step1() {
        return stepBuilderFactory.get("step1")
                .tasklet(((contribution, chunkContext) -> {
//                    throw new RuntimeException("강제 예외.");
                    log.info("=======================================");
                    log.info("여기는 step1입니다.");
                    log.info("=======================================");
                    return RepeatStatus.FINISHED;
                }))
                .build();
    }

    @Bean
    //step
    public Step step2() {
        return stepBuilderFactory.get("step2")
                .tasklet(((contribution, chunkContext) -> {
                    log.info("=======================================");
                    log.info("여기는 step2입니다.");
                    log.info("=======================================");
                    return RepeatStatus.FINISHED;
                }))
                .build();
    }

    @Bean
    //step
    public Step step3() {
        return stepBuilderFactory.get("step3")
                .tasklet(((contribution, chunkContext) -> {
                    log.info("=======================================");
                    log.info("여기는 step3입니다.");
                    log.info("=======================================");
                    return RepeatStatus.FINISHED;
                }))
                .build();
    }

    @Bean
    //step
    public Step step4() {
        return stepBuilderFactory.get("step4")
                .tasklet(((contribution, chunkContext) -> {
                    log.info("=======================================");
                    log.info("여기는 step4입니다.");
                    log.info("=======================================");
                    return RepeatStatus.FINISHED;
                }))
                .build();
    }

    @Bean
    //step
    public Step step5() {
        return stepBuilderFactory.get("step5")
                .tasklet(((contribution, chunkContext) -> {
                    log.info("=======================================");
                    log.info("여기는 step5입니다.");
                    log.info("=======================================");
                    return RepeatStatus.FINISHED;
                }))
                .build();
    }




}

개인 스터디 기록을 메모하는 공간이라 틀린점이 있을 수 있습니다.

틀린 점 있을 경우 댓글 부탁드립니다.

reference: https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B0%B0%EC%B9%98


다음 내용

 

[springBoot] spring batch 사용자 정의 ExitStatus

목차 아래 포스팅에서 이어진 내용입니다. [springBoot] spring batch flowJob (feat.simpleFlow) 목차 아래 포스팅에서 이어진 내용입니다. [springBoot] spring batch jsonFileItemWriter 목차 아래 포스팅에서 이어진 내...

yaga.tistory.com

 

댓글