[Spring Batch] Flow & Step

JAVA/SpringBatch|2020. 3. 23. 19:41

[I] Flow

  • [C] SimpleFlow
    • [C] JsrFlow

Flow
Batch의 Flow 도메인 클래스이며, 순차 Step 실행에는 Flow가 관여하지 않지만, on 과 같은 더 복잡한 흐름 제어가 필요한 경우 Flow가 필요

  • 메소드
    • FlowExecution start(FlowExecutor) : Flow의 실행을 담당하는 메소드
    • FlowExecution resume(stateName, FlowExecutor) : 특정 State 부터 다시 실행하게 하는 메소드
    • Collection<State> getStates() : Flow에 속한 State를 모두 리턴하는 메소드, State는 handle 메소드를 가지며, FlowExeStatus를 리턴

 

SimpleFlow
종료의 상태는 마지막 State에 의존

  • 변수
    • startState : 시작점 State
    • transitionMap : StateTransition의 Map, Transition을 통해 다음 어떤것을 수행할지 나타낼수 있음
    • StateMap : State에 대한 Map
    • stateTransitions : Transition의 리스트
    • stateTransitionComparator : Transition 비교를 위한 클래스
  • 메소드
    • FlowExecution start(FlowExecutor) : 첫번째 Step부터 실행(resume 호출)
    • FlowExecution resume(stateName, FlowExecutor) : isFlowContinued를 반복해서 호출하며 State를 실행
    • isFlowContinued(State, FlowStatus, StepExe) : State의 상태를 판단하여, Flow를 더 실행할지 제어하는 메소드
    • nextState(stateName, FlowStatus, StepExe) : 다음 State를 구하는 메소드

 

JsrFlow
JSR-352의 로직을 구현한 Flow

 

[I] Step

  • [C] AbstractStep
    • [C] PartitionStep
      • [C] PartitionStep
    • [C] TaskletStep
      • [C] BatchletStep
    • [C] DecisionStep
    • [C] JobStep
    • [C] FlowStep

Step
Step 설정을 나타내는 배치 도메인 인터페이스

  • 메소드
    • isAllowStartIfComplete : Complete 더라도 재실행을 허용할지
    • getStartLimit : 동일 식별자로 실행될수 있는 횟수
    • execute(StepExecution) : Step 의 처리를 다루는 메소드

AbstractStep
Step에 공통처리로직을 담은 AbstractClass

  • 변수
    • CompositeStepExecutionListener : StepExecutionListener를 컴포지트로 가지고 있으며 Step의 선 후 단계에서 호출하는 컴포지트 리스너
    • JobRepository : Job의 메타 정보들을 담당
  • 메소드
    • open(ExecutionContext) : doExecute(stepExe)를 호출하기 전 호출
    • close(ExecutionContext) : doExecute(stepExe) 이후 finally에서 호출
    • [A] doExecute() : 실제 Step 실행을 위해 열어놓은 메소드
    • [A] doExecutionRelease() : doExecute(stepExe) 이후 finally에서 close이후 호출
    • [final] execute(StepExe) : Step에 실행을 다루는 메소드, open, close 및 doExecute()를 실행

PartitionStep
Partition 처리를 위한 Step, 결국 파티셔너를 통해 StepExecutio을 여러개로 만들어서 Executor를 통해 수행
Executor가 기본적으로는 Sync지만, 변경하면 parallel도 가능

  • 변수
    • StepExecutionSplitter : Step을 Split하는 전략을 다루는 클래스, Set split(StepExe, gridSize)
    • PartitionHandler : Collection handle(StepExecutionSplitter,StepExe)
    • StepExecutionAggregator : Aggregate의 전략을 다루는 클래스 aggregate(StepExe, Collection)
  • 메소드
    • doExecute() : TaskExecutorPartitionerHandler 기준으로, executor.execute(task)로 다 돌린 후, stepExeAggregator.aggregate를 통해 aggregate

TaskletStep
간단 실행을 위한 Tasklet을 다루는 TaskletStep, 반복이 가능하며, 각 호출 마다 트랜잭션으로 묶인다.

  • 변수

    • RepeatOperations : Step에 반복 여부를 처리하는 Operations
    • CompositeChunkListener : ChunkListener 들을 컴포지트로 가지고 있는 Listener, chunk 전후에 호출
    • StepInterruptionPolicy : step 호출시마다 종료되었는지를 체크하는 클래스
    • CompositeItemStream : ItemStream을 컴포지트로 가지고있는 클래스, Overide 한 open, close, AbstractStep에 execute()에서
    • PlatformTransactionManager : Step처리에 트랜잭션 제어를 위한 트랜잭션 매니져
    • TransactionAttribute : 에러시 롤백 할지 등의 전략을 제공하는 Attribute
  • 메소드

    • doExecute() : TaskExecutorPartitionerHandler 기준으로, executor.execute(task)로 다 돌린 후, stepExeAggregator.aggregate를 통해 aggregate

DecisionStep
JSR-352에 정의되어있는 DecisionStep이며, JSR-352에 있는것 모두 지원하는 것은 아님

  • 변수

    • Decider : 종료 상태를 결정, String decide(StepExe[])

JobStep
Job을 실행할 수 있도록 하는 Step, 파티셔닝 실행 및 병렬 실행 지원

  • 변수

    • Job : 호출할 Job
    • JobLauncher : Job 실행을 위한 Launcher
    • JobParametersExtractor : JobParam getJobParameters(Job, StepExe) 을 통해 JobParam을 구하는 클래스
  • 메소드

    • doExecute() : jobParam 생성, JobLauncher를 통해 job 실행

FlowStep
Flow 실행을 위한 Step
Step의 그룹핑 실행과 여러 Step들의 파티셔닝 등을 위한 Step
(FlowJob과 거의 코드가 비슷..)

  • 변수

    • Flow : 실행할 Flow
  • 메소드

    • doExecute() : FlowExecutor를 통한 Flow 실행

추후 State, Execution

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

[SpringBatch] State  (0) 2020.03.25
[Spring] Spring Batch Reader Writer  (0) 2020.03.24
[Spring Batch] Job  (0) 2020.03.20
[Spring] Spring Batch Tasklet  (0) 2020.02.25
[Spring] Spring Batch Version History  (0) 2020.02.22

댓글()