devnoong.log
article thumbnail
728x90

SpringBatch

Job -> 여러개의 Step  (① Tasklet  ②Chunck)  로 구성되어 있음. 

 

job 

Job Instance : job 수행시 인스턴스 객체의 단위 (성공적으로 종료된 동일한 인스턴스 수행시,  중복 수행을 막기 위해 exception이 발생된다.  )

 

① step (Tasklet )

StepExecution : Job 인스턴스 수행시 , 세부 로직 수행 내역으로 read, write ,count 의 상세 내역을 확인 할 수 있다. 

 

 Step 수행 단위 : tasklet 

 

.next()를 이용하여 다중 step을 구성할 수 도 있고 , step flow를 통해 다중 step을 구현 할 수 있다.

 

다만 step flow를 통해 다중 step을 구현 할 경우에, tasklet 에 대한 상태값은 명시적으로 'return RepeatStatus.FINISHED ' 를 선언하여 현재 tasklet 작업이 성공적으로 완료되었음을 알린다.

 

' ExitStatus.COMPLETED' 를 선언하여 Step 작업이 성공적으로 완료되었음을 알린다.

 

 


Tasklet의 RepeatStatus와 차이점
- RepeatStatus: Tasklet이 완료되었는지 여부를 나타냅니다.
- ExitStatus: Step이나 Job이 전체적으로 완료되었는지, 그리고 어떤 상태로 완료되었는지를 나타냅니다.

스텝 실행 후 상태 설정
스텝이 실행된 후, Spring Batch는 ExitStatus를 설정하여 스텝이 어떤 상태로 완료되었는지 나타냅니다.
기본적으로 Tasklet이 RepeatStatus.FINISHED를 반환하면, 스텝은 ExitStatus.COMPLETED 상태로 완료됩니다.

 

 

 

Tasklet은 Lamda 를 사용하여 생성 할 수 도 있고 ,  MethodInvokingTaskletAdapter를 사용하여 구현 할 수 있다.

 

Lamda를 사용하면 작은 Tasklet을 직접 작성하여 쉽게 구현 할 수 있다.

반면의 기존의 method를 Tasklet으로 구현하고 관리하기 위해서는 MethodInvokingTaskletAdapter를 사용하여 구현한다.

 

② step (Chunk)

  • 읽기(Read) — Database에서 배치처리를 할 Data를 읽어온다
  • 처리(Processing) — 읽어온 Data를 가공,처리를 한다 (필수사항X)
  • 쓰기(Write) — 가공,처리한 데이터를 Database에 저장한다.

 

 Step 수행 단위 : Chunk

 

 

chunck 기반 Tasklet 작성시 , 'return RepeatStatus.Finished'  혹은  'return RepeatStatus.ExitStatus' 를 명시적으로 사용

 반환값이 없을 경우, 기본적으로 Tasklet이 완료되었다고 간주하나 코드의 가독성과 유지보수성을 위해 사용하는 것을 권장

 

 

spring batch에서 page = chunk * n 으로 해야 성능적으로 가장 좋다

 

728x90