상세 컨텐츠

본문 제목

1. Spring Batch Basics

Spring/SpringBatch

by husks 2016. 3. 31. 15:19

본문

반응형

1. Spring Batch의 목적 

 

Spring Batch는 엔터프라이즈 시스템 환경에서 매일 같이 발생하는 배치 작업에 대하여, 보다 가볍고 포괄적인 배치 프레임워크를 제공합니다.

 

Spring Batch는 Quartz와 같은 스케쥴링 프레임워크가 아니며, 또한 기존의 스케쥴링 프레임워크를 대체하는 또 다른 스케쥴링 프레임워크가 아닙니다. 단지, 기존의 스케쥴링 프레임워크와 연동되어 작동되도록 작성되었으며 high-volume/high-performance 배치 작업에 필요한 재사용 가능한 기능들을 제공할 뿐입니다.

 

2. Spring Batch Usage Scenarios

 

  • Commit batch process periodically

  • Concurrent batch processing: parallel processing of a job

  • Staged, enterprise message-driven processing

  • Massively parallel batch processing

  • Manual or scheduled restart after failure

  • Sequential processing of dependent steps (with extensions to workflow-driven batches)

  • Partial processing: skip records (e.g. on rollback)

  • Whole-batch transaction: for cases with a small batch size or existing stored procedures/script

 

3. Spring Batch Architecture



Application Layer: 개발자에 의해 작성된 모든 배치 잡과 커스텀 코드가 포함되어 있습니다.

Batch Core Layer: 배치 잡을 런칭하고 통제에 필요한 모든 런타임 클래스가 포함되어 있습니다.

Batch Infrastructure Layer: core 프레임워크 또는 애플리케이션 개발자가 사용하는 reader/writers 및 RetryTemplate가 같은 서비스들을 포함되어 있습니다.

 

4. Spring Batch Domain Object Definitions



상기의 다이어그램은 아래에서  설명될 각각의 도메인 오브젝트에 대한 연관 관계를 표시한 그림입니다.

하나의 Job은 최소 하나에서 여러개의 Step으로 구성되며, 하나의 Step은 정확이 하나의 ItemReader, ItemProcessor, ItemWriter를 가집니다. Step으로 구성된 Job은 JobLauncher에 의해 실행되며, 실행 동안의 모든 메타 데이터는 JobRepository에 저장됩니다.

4.1. Job

Spring Batch에서 Job은 단순히 Step들로 구성되어 있으며, 전반적인 배치 작업을 정의합니다.

Job 인터페이스의 구현체로는 AbstractJob, FlowJob, GroupAwareJob, SimpleJob(default)이 있습니다.

예를 들어, Step 1) 매일 오전 9시에 모든 신용카드 거래 내역을 읽어서, Step 2) 파일로 저장하여, Step 3) 정산 시스템으로 전달하는

SettlementJob을 정의할 수 있습니다.

4.2. JobInstance

위의 예제 SettlementJob이 매일 오전 9시에 실행되기 위해서는 SettementJob 클래스의 새로운 인스턴스가 하나 생성되고 이 인스턴스가 실행되는데, 이렇게 새롭게 생성된 인스턴스를 JobInstance라고 합니다.

4.3. JobParameters

SettlementJob이 2013년 7월 1일 오전 9시에 실행되고, 하루 전날(6월 30일)의 신용 카드 거래 내역을 데이터베이스에서 읽어야 된다고 가정하도록 합니다.

우리는 JobParamerts에 해당 날짜(6월30일)를 셋팅하여 SettlementJob에 전달함으로써, SettlementJob이 해당 날짜의 거래 내역만 읽어 올 수 있도록 할 수 있습니다.

4.4. JobExecution

JobInstance를 매번 실행할 때마다 JobExecution이 발생하였다고 말할 수 있습니다. SettementJob이 7월 1일 오전 9시에 실행되면 하나의 JobExecution이 발생하고, 만약 실패하여 오전 10시에 다시 실행되었다면 또 다른 JobExecution이 발생한 것이 됩니다.

JobExecution은 실제 실행동안 어떤 일이 발생하였는지를 기록하는 저장 장치입니다.

JobExecution으로 부터 다음의 정보을 알 수 있습니다.

 status

 BatchStatus.SATARTED, BatchStatus.FAILED, BatchStatus.COMPLETED

 startTime

 job 실행이 시작된 현재의 시스템 시간

 endTime

 job 실행이 종료된 현재의 시스템 시간(성공/실패 여부와 상관 없음)

 exitStatus

 실행 결과값을 exitStatus로 표현

 createTime

 JobExecution이 생성된 시간으로 JobExecution이 아직 실행되지 않았다면 startTime은 null일 수 있음

 lastUpdated

 JobExecution이 Repository에 저장된 마지막 시간

 executionContext

 실행 사이에 저장될 필요가 있는 사용자 데이터를 포함하고 있는 'property bag'

 failureExceptions

 Job 실행 중 발생한 Exception 리스트

 

 

4.5. Step

Job은 최소 하나에서 여러개의 Step으로 정의되는데, 각각의 Step은 실제 배치 작업을 정의합니다.

Step은 Unit Of Work로서, 파일 또는 데이터베이스에서 간단한 데이터 읽기부터 복잡한 비즈니스 로직을 포함합니다.

4.6. StepExecution

Job과 JobExecution의 관계처럼, StepExecution은 Step 실행에 대한 모든 정보을 가지고 있는 실행 환경 오브젝트입니다.

StepExecution으로 부터 다음의 정보를 알 수 있습니다.

 status

 BatchStatus.SATARTED, BatchStatus.FAILED, BatchStatus.COMPLETED

 startTime

 Step 실행이 시작된 현재의 시스템 시간

 endTime

 Step 실행이 종료된 현재의 시스템 시간(성공/실패 여부와 상관 없음)

 exitStatus

 실행 결과값을 exitStatus로 표현

 executionContext

 실행 사이에 저장될 필요가 있는 사용자 데이터를 포함하고 있는 'property bag'

 readCount

 읽기에 성공한 item 수

 writeCount

 쓰기에 성공한 item 수

 commitCount

 commit된 transaction 수

 rollbackCount

 Step에 의해 발생된 롤백 트랜잭션 수

 readSkipCount

 읽기에 실패한 아이템 수

 processSkipCount

 프로세스에 실패한 아이템 수

 filterCount

 ItemProcessor에 의해 'filtered'된 수

 writeSkipCount

 쓰기에 실패한 아이템 수

 

4.7. JobRepository

JobRepository는 JobLauncher, Job 및 Step 구현체에 대한 CRUD 오퍼레이션을 제공할 뿐만 아니라, Job, JobExeuction, StepExecution에 관련된 모든 정보가 저장되는 곳입니다.

JobRepository는 in-memory 와 jdbc(database) 저장 방법이 있습니다.

 

4.8. JobLauncher

실제로 Job을 실행하는 오브젝트입니다.

 

4.9.Item Reader

배치 프로세스에 필요한 데이터를 파일 또는 데이터베이스에서 읽어 올때 사용되는 구현체의 인터페이스를 정의합니다.

 

4.10. Item Writer

최종 배치 작업 결과를 파일 또는 데이터베이스에 저장 할때 사용되는 구현체의 인터페이스를 정의합니다.

 

4.11. Item Processor

ItemReader에 의해 읽어진 아이템에 대하여,  비즈니스 로직을 적용할 때 사용됩니다.

 

파일/데이터베이스 -> ItemReader -> ItemProcessor -> ItemWriter -> 파일/데이터베이스

 

4.12. Tasklet

Step을 정의할때 input / output processing (reader와 writers을 사용하는 경우)이 없는 경우에 사용되는 인터페이스 입니다.


출처: http://willygwu2003.blog.me/130171376941

반응형

관련글 더보기

댓글 영역