IT/development

[springBoot] spring batch flowJob (feat.simpleFlow)

알 수 없는 사용자 2023. 11. 18. 13:34
반응형

목차

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

     

    [springBoot] spring batch jsonFileItemWriter

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

    yaga.tistory.com


    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

     

    반응형