728x90
- Spring Batch Job Flow
Spring Batch의 Job을 구성하는데 Step이 있다.
Step은 실제 Batch 작업을 수행하는 역할을 한다.
Job 내부의 Step들 간에 순서, 처리 흐름을 제어할 필요가 있는데 여러 Step들을 어떻게 관리하는지 정리해 보자.
1. Next
- next로 순차적으로 Step을 연결할 때 사용한다.
- 실행하면 잘 연결되어 나온다.
2. 조건별 흐름 제어(Flow)
Next에서 순차적으로 Step의 순서를 제어하는 것을 확인했다.
여기서, 앞의 step에서 오류가 발생하면 나머지 뒤에 있는 step들은 실행되지 못한다.
하지만 상황에 따라서 정상일 때에는 Step B로, 오류가 발생했을 때에는 Step C로 실행되어야 할 경우가 있다.
이럴 경우를 대비해 Spring Batch Job에서 조건별로 Step을 사용할 수 있다.
- 위의 코드가 Step1이 실패하냐 성공하냐에 따라 결과가 달라지는 코드이다.
- Step1 실패 시 : Step1 -> Step3
- Step1 성공 시 : Step1 -> Step2 -> Step3
- 코드 설명?
- .on()
- 캐치할 ExitStatus 지정
- ' * ' 일 경우 모든 ExitStatus가 지정된다.
- 캐치할 ExitStatus 지정
- to()
- 다음으로 이동할 Step 지정
- 다음으로 이동할 Step 지정
- from()
- 일종의 이벤트 리스너 역할
- 상태값을 보고 일치하는 상태라면 to()에 포함된 step을 호출한다.
- step1의 이벤트 캐치가 FAILED로 되있는 상태에서 추가로 이벤트 캐치하려면 from을 써야만 한다.
- 일종의 이벤트 리스너 역할
- end()
- end는 FlowBuilder를 반환하는 end와 FlowBuilder를 종료하는 end 2개가 있다.
- on("*")뒤에 있는 end는 FlowBuilder를 반환하는 end
- build() 앞에 있는 end는 FlowBuilder를 종료하는 end
- FlowBuilder를 반환하는 end 사용시 계속해서 from을 이어갈 수 있다.
- end는 FlowBuilder를 반환하는 end와 FlowBuilder를 종료하는 end 2개가 있다.
여기서 on이 캐치하는 상태값이 BatchStatus가 아닌 ExitStatus라는 점이다.
그래서 분기처리를 위해 상태값 조정이 필요하면 ExitStatus를 조정해야한다.
- 실행시켜보니 Step1에서 바로 Step3으로 넘어갔다.
- Step1에서 주석처리를 하고 다시 실행시켜보면
- Step1 -> Step2 -> Step3순으로 실행된다.
3. Decide
2번에서 Step의 결과에 따라 다른 Step으로 이동하는 방법을 공부했다.
위의 방법은 2가지의 문제점이 발생한다.
1. Step이 담당하는 역할이 2개 이상이된다.
: 실제 해당 Step이 처리해야 할 로직외에도 분기처리를 시키기 위해 ExitStatus조작이 필요하다.
2. 다양한 분기 로직 처리의 어려움
: ExisStatus를 커스텀하게 고치기 위해서 Listener를 생성하고 Job Floww에 등록하는 등 번거로움이 존재한다.
그래서 Step들 간의 Flow분기만을 담당하면서 다양한 분기처리가 가능한 타입을 사용한다.
'JobExecutionDecider' 라고 한다.
- 위의 코드는 랜덤 숫자를 뽑아와 홀수 / 짝수를 구분하여 다른 출력값을 보내는 코드 입니다.
- 실행시 홀수 / 짝수를 구분하여 잘 출력한다.
'JAVA > Spring' 카테고리의 다른 글
[Spring] Spring Batch(4) (0) | 2023.05.19 |
---|---|
[Spring] Spring Batch(2) (0) | 2023.04.28 |
[Spring] Spring Batch(1) (0) | 2023.04.26 |
[Spring] Spring Boot 3.0 (0) | 2023.03.26 |
[Spring] Java Spring? (0) | 2023.03.23 |