Spring Batch

[Spring Batch] JobScope, StepScope

오늘도개발 2024. 5. 7. 13:34

 

1. Scope 란?

 

  - 생명주기를 관리하기 위해 사용하는 어노테이션

 

  - Spring 에서 bean으로 주입하면 기본적으로 싱글톤을 유지한다.

 

  - Singleton 을 사용하지 않는 경우 Scope("prototype") 을 지정하여 주입이 일어날 때 마다 새로운 인스턴스를 생성한다.

 

 

2. JobScope 란?

 

  - batch 에서 생명주기를 Job과 함께하는 어노테이션

 

  - JobScope를 별도로 지정하지 않고 스케쥴러를 사용하여 반복 작업을 하면 이전에 작업한 이후부터 작업이 실행된다.

   EX> jdbcItemReader를 사용한 경우, 다음 job 실행시 1page 부터 시작하는게 아니라 마지막 page 에서 부터 시작 

 

  - @JobScope를 사용하여 인스턴스로 Job의 생명주기와 일치하도록 설정 할 수있다.

 

 

    /**
     * DB 에서 tripId를 꺼내온 후 해당하는 id의 추천 list를 분석해 Redis에 저장
     */
    @JobScope
    @Bean
    public Step tripLikeRecommendStep(){
        return new StepBuilder(TRIP_LIKE_RECOMMEND_STEP, jobRepository)
                .<Long, DataSet>chunk(completionPolicy(), new DataSourceTransactionManager(dataSource))
                .reader(jdbcPagingItemReader())
                .processor(itemProcessor())
                .writer(this::writeChunkDataToRedis)
                .transactionManager(platformTransactionManager)
                .taskExecutor(taskExecutor())
                .listener(jobExecutionListener(taskExecutor()))
                .build();
    }

 

 

3. StepScope 란?

 

 - batch 에서 생명주기를 Step과 함께하는 어노테이션

 

  - @StepScope를 사용하여 인스턴스로 step의 생명주기와 일치하도록 설정 할 수있다.

 

  - tasklet 기반 작업일 때, tasklet 에 지정할 수 있다.

 

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

[Spring Batch] ItemWriter  (0) 2024.05.07
[Spring Batch] ItemProcessor  (0) 2024.05.07
[Spring Batch] ItemReader  (0) 2024.05.07
[Spring Batch] Job 과 Step  (0) 2024.05.06
[Spring Batch] 스프링 배치 란?  (0) 2024.05.06