DevBoi

[Spring Batch] ChunkContext , Late Binding , ExecutionContext 본문

Develop/[Spring Batch]

[Spring Batch] ChunkContext , Late Binding , ExecutionContext

HiSmith 2022. 4. 11. 16:32
반응형

Job에 파라미터를 전달하는 방법은 두가지가 있다.

 

1) Chunk Context





2) Late Binding

 

 

StepScop,JobScope란?

Bean 생성시점을 Step,Job시점으로 늦춘다. 만약 서버를 올릴때 tasklet을 한번에 모두 생성 시키면

한 tasklet에 대해서 동시에 여러 step들이 실행되면서 침범당할 수 있다.

이를 방지하기 위해서 사용한다.

 

Late BInding을 사용하면 얻을수 있는 이점

-JobParameter를 특정 메서드가 실행하는 시점까지 지연시켜 할당할 수 있다.

즉 애플리케이션이 구동되는 시점이 아니라 비즈니스 로직이 구현되는 어디든 JobParameter를 할당하여 유연한 설계가 가능하다.

 

이게 뭔소리냐, Job Parameter가  StepContext , JobExecutionContext에 할당가능하다는 얘기고,

이말은 즉, JobParameter를 Controller나 Service 같은 비즈니스 로직 처리단계에서 할당할 수 있다는 말이다.

 

 

-병렬처리에 안전하다.

Step의 구성요소인 ItemReader,ItemProcessor,ItemWrtier가 있고

ItemReader에서 데이터를 읽어오는 메서드를 서로 다른 Step으로 동시에 병렬 실행 된다면, 서로 상태를 간섭 받을 수 있다.

 

이건 뭔소리냐, Step안에 Tasklet이 있고, 안에 멤버변수를 변경한다고 하자

StepScope없이 병렬로 실행하게 되면, 서로 다른 Step에서 하나의 Tasklet을 두고  마구잡이로 상태가 변경된다.

StepScope가 있다면, Step에서 별도로 Tasklet을 생성하고, 관리하기 때문에 서로 간의 Step끼리  영향을 간섭 할 수 없다.

 



추가로, Late Bind, @StepSCope를 활용한다면, 해당 프록시 객체가 생성이 되게 됩니다.

 

 

 

 

 

3) ExecutionContext

 

ExecutionContext는 스프링 배치에서 job과 step에 대한 상태를 저장하고 있다.

또한 하나의 job과 step에 대해서 각각의 ExecutionContext를 가진다.

 

반응형

'Develop > [Spring Batch]' 카테고리의 다른 글

[Spring batch] Repeat step  (0) 2022.04.11
[Spring Batch] RepeatStatus  (0) 2022.04.11
[Spring Batch] 배치 실행 방법  (0) 2022.04.11
[Spring Batch] Cursor ,Paging 기반  (0) 2022.04.11
[Spring Batch] Tasklet vs Chunks 차이  (0) 2022.04.11