[Spring Batch] Flow & Step
JAVA/SpringBatch2020. 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
- [C] PartitionStep
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 |
댓글()