flow는 또다른 flow를 구성할 수 있다
.
아키텍처를 살펴보자.
flowbuilder에서 step이라는 type의 객체를 설정했다면
내부적으로 flowbuilder는 stepstate라는 객체를 만들고 이 객체안에 step을 저장한다.
on 메서드에는 Exitstatus 값과 매칭되는 값을 설정할 수 있다.
flow type 객체를 생성하면
flowstate라는 객체를 생성하고 flow를 저장한다.
decider type의 객체를 설정하면
내부적으로 DecisionState 객체를 생성하고 JobExecutionDecider를 저장한다.
SplitState는 여러 flow를 병렬적으로 동시에 실행하고자 할 때 SplitState api를 사용한다.
StateTransition이라는 클래스가 있다.
이 클래스는 State를 현재 우리가 생성하고 저장한 state값을 참조하고 있다.
총 3개의 속성이 있는데
State, Pattern, next
State: 현재 속성의 state 저장
Pattern: transition on의 값을 저장
Next : 다음 state를 저장
SimpleFlow는 stateTranstion을 list 형태로 가지고 있다.
State의 갯수만큼 StateTransition이 생성되고
이는 SimpleFlow에 저장이 된다.
SimpleFlow는 State를 실행시킨다.
State는 StateTransition을 통해 CurrentState 정보와 NextState 정보를 알 수 있고
이를 이용해서 State를 실행할 수 있다.
SimpleFlow는 StateTranstion으로 부터 정보를 가지고 와서 CurrentState를 실행시키는 구조로 되어있다.
SimpleFlow는 StateMap에 저장되어 있는 모든 State 들의 handle 메서드를 호출해서 모든 Step 들이 실행되도록 한다.
SimpleFlow는 현재 호출되는 State가 어떤 타입인지 알지 못하고 관ㅅ미도 없다. 단지 handle 메서드를 실행하고 상태값을 얻어올 뿐이다. (상태 패턴 : FlowExecutionStatus)
FlowJob이 FlowExecutor을 통해서 SimpleFlow를 실행시킨다.
SimpelFlow는 내부적으로 StateMap을 가지고 있다
StateMap은 StateTranstion 객체로부터 State 객체의 정보를 참조해서 매핑함
맨 처음에 Flow에 지정된 State를 실행시키고 (start)
resume은 nextState로 부터 다음에 실행될 state를 전달받는다.
nextState는 stateMap으로 부터 다음 state를 찾아온다.
찾아온 state를 resume에게 전달해주고
resume을 state가 null이거나 실행 불가능할 때까지 진행됨.
'강의 > 스프링배치' 카테고리의 다른 글
스프링 배치 - SimpleFlow (0) | 2023.01.30 |
---|---|
Flowjob architecture (0) | 2023.01.30 |
스프링 배치 - JobExecutionDecider (0) | 2023.01.29 |
스프링 배치 - 사용자 정의 ExitStatus (0) | 2023.01.29 |
스프링 배치 실행 - Transition (0) | 2023.01.27 |