본문 바로가기

개발

4. Spring boot batch quick start

 - https://spring.io/guides/gs/batch-processing/


스프링 공식 홈페이지에 나와있는 quick start를 보고 따라하면서 정리.


spring batch 와 spring boot를 연동하고 프로세스 과정을 살펴보겟습니다.

batch로 데이터를 바꿔줄 sample 데이터를 추가한다.


image


schema-@@platform@@.sql으로 플랫폼에 맞춰서 sql문이 돌아간다.
-all이면 모든 플랫폼에 대해 기본값으로 설정됨.

ex>schema-mysql.sql

image1


도메인 모델이 들어갈 클래스를 생성한다.

image2


간단하게 예제로 나와있는것 처럼 firstName 과 lastname을 대문자로 만들어주는 
PersionItemProcessor를 만들었습니다.
PersionItemProcessor는 ItemProcessor의 인터페이스를 구현받습니다.

Item이 나오는데 Item은 처리할 데이터의 가장 작은 구성 요소 입니다.


ItemProcessor를 구현 받는 PersonItemProcessor는 item을 처리할 중요 비지니스 로직이 들어가 있는

클래스 입니다. 

image3


이제 실제 Batch job을 돌려봅시다. Spring batch는 개발자가 비지니스 로직에 집중할수 있도록 많은 유틸리티 클래스를 제공합니다.

EnableBatchProcessing은 jobBuilderFactory와 stepBuilderFactory 빈을 제공합니다.
Job은 step 으로 이루어져 있고 Step은 reader, processor, writer로 이루어져 있습니다.
JobInstance 는 Job + Job Parameter이기 때문에 Job Parameter를 자동으로 Increment 하기 위해서 사용합니다.


Step에서는 한번에 쓸 데이터 양을 정의 합니다. 이 경우에는 한번에 최대 10개 item의 record를 기록합니다.”chunk”의 입력 및 출력 유형을 나타내며, ItemReader<~>및 ItemWriter<~> 와 일치합니다.

image4


아래 그림을 보면 위에 프로세스와 비슷하게 흘러가는걸 확인할수 있습니다.

image


reader   –   sample-data에 있는 csv파일을 읽어서 하는 부분이니 이런식으로 읽는구나만 참조 하면 될 것 같습니다.
writer – date를 db에 쓰는 부분 입니다.

image5

  

Processor 부분인데 실제 비지니스 로직이 포함 되는 부분입니다.

Image6.png



job 에 걸린 listener를 보면 끝난 상태를 체크하는 부분을 JobExecution에서 status 를 가져오는것을 알수 있습니다.

Image7.png



Job Execution에 대해서는 이전 글을 참고하시면 됩니다.
결과 화면 :
Image10.png


배치 처리는
  1. main 메소드가 있는 jar 만들거나
  2. 웹 애플리케이션에 포함시킨다.

jar 만드는 방법은 구글링 참고.

위에 사이트에서 소스를 받아서 돌렸는데 h2 메모리 디비 말고 mysql을 쓰고 싶어서

datasource에

Image8.png
다음과 같이 세팅했습니다.
BasicDataSource 를 import하기 위해서 maven에 dependency를 추가하면 끝.
Image9.png



— 기타 —
1. 쿼츠랑 스프링 스케줄러랑 무슨차이인가요?  -P사 다니는 K모씨

Quartz와 Spring  Scheduler의 차이.
Quartz
– 모든 Java 애플리케이션에 통합 할 수있는 오픈 소스 작업 스케줄 라이브러리.
– 수십, 수백 또는 심지어 수만 개의 작업을 실행하기위한 간단하거나 복잡한 일정을 만드는 데 사용할 수 있습니다.
– JTA 트랜잭션 및 클러스터링 지원과 같은 많은 엔터프라이즈 급 기능이 포함되어 있습니다

Spring  Scheduler
– Spring은 또한 Timer와 JDK 1.3이후에  Quartz Scheduler와의 스케쥴링을 지원하기위한 통합 클래스를 제공한다.
->https://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html