ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 24. FaultTolerant
    BackEnd/Spring Batch 2022. 1. 4. 22:50
    반응형

      Spring Batch는 Job 실행 중에 오류가 발생할 경우 장애를 처리하기 위한 기능을 제공하며 이를 통해 복원력을 향상시킬 수 있습니다. 오류가 발생해도 Step이 즉시 종료되지 않고 Retry 혹은 Skip 기능을 활성화 함으로써 내결함성 서비스가 가능하도록 합니다. FaultTolerant 구조는 청크 기반의 프로세스 기반 위에 Skip과 Retry 기능이 추가되어 재정의 되어 있습니다.

    • Skip: ItemReader / ItemProcessor / ItemWriter에 적용할 수 있습니다.
    • Retry: ItemProcessor / ItemWriter에 적용할 수 있습니다.

     

    API

    package io.springbatch.springbatchlecture;
    
    import lombok.RequiredArgsConstructor;
    import org.springframework.batch.core.*;
    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.item.*;
    import org.springframework.batch.item.adapter.ItemWriterAdapter;
    import org.springframework.batch.item.support.ClassifierCompositeItemProcessor;
    import org.springframework.batch.item.support.CompositeItemProcessor;
    import org.springframework.batch.item.support.builder.CompositeItemProcessorBuilder;
    import org.springframework.batch.repeat.CompletionPolicy;
    import org.springframework.batch.repeat.RepeatCallback;
    import org.springframework.batch.repeat.RepeatContext;
    import org.springframework.batch.repeat.RepeatStatus;
    import org.springframework.batch.repeat.exception.SimpleLimitExceptionHandler;
    import org.springframework.batch.repeat.policy.SimpleCompletionPolicy;
    import org.springframework.batch.repeat.policy.TimeoutTerminationPolicy;
    import org.springframework.batch.repeat.support.RepeatTemplate;
    import org.springframework.classify.PatternMatchingClassifier;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    @RequiredArgsConstructor
    @Configuration
    public class FaultTolerantConfiguration {
    
        private final JobBuilderFactory jobBuilderFactory;
        private final StepBuilderFactory stepBuilderFactory;
    
        @Bean
        public Job job() throws Exception {
            return jobBuilderFactory.get("batchJob")
                    .incrementer(new RunIdIncrementer())
                    .start(step1())
                    .build();
        }
    
        @Bean
        public Step step1() throws Exception {
            return stepBuilderFactory.get("step1")
                    .<String, String>chunk(5)
                    .reader(new ItemReader<String>() {
                        int i = 0;
                        @Override
                        public String read() {
                            i++;
                            if(i == 1) {
                                throw new IllegalArgumentException("skip");
                            }
                            return i > 3 ? null : "item" + i;
                        }
                    })
                    .processor((ItemProcessor<String, String>) item -> {
                        throw new IllegalStateException("retry");
    //                    return item;
                    })
                    .writer(items -> System.out.println(items))
                    .faultTolerant()
                    .skip(IllegalArgumentException.class)
                    .skipLimit(1)
                    .retry(IllegalStateException.class)
                    .retryLimit(2)
                    .build();
        }
    
        @Bean
        public SimpleLimitExceptionHandler simpleLimitExceptionHandler(){
            return new SimpleLimitExceptionHandler(3);
        }
    }

     

    [참고자료]

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

    반응형

    'BackEnd > Spring Batch' 카테고리의 다른 글

    26. Retry  (0) 2022.01.07
    25. Skip  (0) 2022.01.06
    23. Repeat  (0) 2022.01.04
    22. ItemProcessor  (0) 2022.01.04
    21. ItemWriterAdapter  (0) 2021.12.31

    댓글

Designed by Tistory.