개발 기록

> [Spring Batch] Job, Step 속성 본문

Spring

> [Spring Batch] Job, Step 속성

1z 2022. 10. 28. 15:09

 

 

1. Job

 

(1) JobBuilder

지정된 이름을 가진 작업에 대한 새 빌더를 만든다. JobBuilderHelper 를 상속받고 있으며 메서드 별로 반환하는 빌더 유형이 다르다.

 

 @Bean
public Job simpleJobBuilder() {

    return new JobBuilder("simpleJob", jobRepository)
        .start(step1())
        .next(step2())
        .preventRestart()
        .incrementer(new RunIdIncrementer())
        .validator( new DefaultJobParametersValidator(new String[]{"name", "date"}, new String[]{"count"}))
        .listener(new JobCompletionNotificationListener())
        .build();
}

 

(2) 속성

메서드명 설명
start() 특정 단계 또는 일련의 단계를 실행할 새 작업 빌더를 생성 => SimpleJobBuilder
next() 이전 단계가 성공한 경우, 이 단계로 진행 또는 종료
preventRestart() 실패한 경우에도 이 작업 실행을 다시 시작하지 않도록 하는 설정
incrementer() 기존에 전달되는 JobParameters를 변경하지 않으면서 JobParameters 추가
* RunIdINcrementer .getNext() => 새로운 JobParameters를 만들어 제공
listener() Job, Step, Chunk 실행 전후에 발생하는 이벤트를 잡아 활용하도록 제공
validator()  Job이 실행되기 전에 Job에 전달된 JobParameters 검증

 

2. Step

 

(1) StepBuilder

    @Bean
    public Step step() {

        return new StepBuilder("step", jobRepository)
            // Chunk(10) 선언(트랜잭션 범위): 한 번에 최대 10개의 레코드,
            // <?,?> (Reader의반환할 타입, Writer에 파라미터로 넘어올 타입)
            .<?, ?> chunk(3, transactionManager)
            // 데이터를 읽는다 .
            .reader(reader())
            // 사용자 정의 비즈니스 로직 적용
            .processor(processor())
            // 데이터베이스에 기록
            .writer(writer())
            .taskExecutor(this.taskExecutor)
            .listener(new CustomJobExecutionListener())
            .faultTolerant()
            .skip(Exception.class)
            .skipLimit(1000)
  			.retryLimit(3)
      		.retry(ConnectTimeoutException.class)
            .build();
    }

 

(2) 속성

메서드명 설명
chunk() 트랜잭션 범위
reader()  
processor()  
writer()  
taskExecutor()  한 Step 내에서 각 스레드가 chunk 단위로 실행되게 하는 방식
tasklet() tasklet 클래스 설정, TaskletStepBuilder 반환
faultTolerant() 처리 실패 시 Skip, Retry 로 대응 하기 위한 설정
skip()  설정된 Exception이 발생했을 경우, 해당 데이터 처리를 건너뛰는 기능
skipLimit() skip-limit에 설정된 횟수만큼은 예외가 발생해도 예외를 skip 한다.
startLimit() Step 의 실행 횟수를 설정, 설정한 만큼 실행되고 초과시 오류 발생
allowStartIfComplete() 실패로 인한 재시작이 가능한 Job이 다시 실행될 때, 이전 실행에서 Step의 성공 여부와 관계 없이 항상 Step을 실행하기 위한 설정 (default false)
* 잡이 실행될때마다 무조건 해당 Step이 실행되게 하는 옵션

retry() 해당 Exception 이 발생 했을 때 재시도
retryLimit() 재시도 횟수