JAVA/Spring

[Spring] Spring Batch(4)

코딩공대 2023. 5. 19. 22:29
728x90


1. Job Parameter, Scope

 

Job Parameter를 사용하기 위해선 항상 Spring Batch 전용 Scope를 선언해야 한다.

크게 @StepScope, @JobScope 두 가지가 있다.

사용법은 SpLE로 선언해서 사용하면 된다.

   - @Value("#{jobParameters[파라미터명]}")

 

JobScope

  

StepScope

     - @JobScope는 Step 선언문에서 사용 가능하고, @StepScope는 Tasklet이나 ItemReader, ItemWriter, ItemProcessor에서 사용할 수 있다.

 

     - 예제 코드에서 null을 호출하는 부분이 있는데 Job Parameter의 할당이 어플리케이션 실행 시에 하지 않기 때문에 가능하다.

        2. 에서 좀 더 자세히 살펴보자

 

2. @StepScope, @JobScope

 

Spring Batch 컴포넌트(Tasklet, ItemReader, ItemWriter, ItemProcessor 등)에 @StepScope를 사용하면 Spring Batch가 Spring 컨테이너를 통해 지정된 Step의 실행시점에 해당 컴포넌트를 Spring Bean으로 생성한다.

마찬가지로 @JobScope는 Job 실행시점에 Bean이 생성된다.
 -> Bean의 생성 시점을 지정된 Scope가 실행되는 시점으로 지연시킨다는 뜻이다.

이렇게 Bean의 생성시점을 어플리케이션 실행 시점이 아닌, Step이나 Job의 실행시점으로 지연시키면서 얻는 장점은 크게 2가지가 있다.

1. Job Parameter의 Late Binding이 가능하다.
 : Job Parameter가 Step Context 또는 Job ExecutionContext 레벨에서 할당시킬 수 있다.
   꼭 Application이 실행되는 시점이 아니더라도 Controller나 Service와 같은 비지니스 로직 처리 단계에서 Job Parameter를 할당시킬 수 있다.
   
2. 동일한 컴포넌트를 병렬, 동시에 사용할 때 유용하다.
 : Step안에 Tasklet이 있고, 이 Tasklet은 멤버 변수와 이 멤버 변수를 변경하는 로직이 있다고 하면 이 경우 @StepScope 없이 Step을 병렬로 실행시키게 되면 서로 다른 Step에서 하나의 Tasklet을 두고 마구잡이로 상태를 변경하려고 할 것이다. 하지만 @StepScope가 있다면 각각의 Step에서 별도의 Tasklet을 생성하고 관리하기 때문에 서로의 상태를 침범할 일이 없다.

 

'JAVA > Spring' 카테고리의 다른 글

[Spring] Spring Batch(3)  (0) 2023.05.19
[Spring] Spring Batch(2)  (0) 2023.04.28
[Spring] Spring Batch(1)  (0) 2023.04.26
[Spring] Spring Boot 3.0  (0) 2023.03.26
[Spring] Java Spring?  (0) 2023.03.23