[스프링/Spring] 스프링 배치(Spring Batch) DB를 통한 플로우를 정리한다.
스프링 배치(Spring Batch) DB를 통한 플로우
1. Job Launcher를 통해 스프링 배치(Spring Batch) Job 실행
2. BATCH_JOB_INSTANCE 테이블에서 해당하는 스프링 배치(Spring Batch) Job의 JOB_KEY와 JOB_NAME이 같은게 있는지 확인한다. (여기서, JOB_KEY와 JOB_NAME, JOB Parameter 까지 비교해야 한다.)
- job key와 job name이 같고, 생성되는 잡 인스턴스는 시간에 따라 계속 생성할 수 있기 때문에.
3. 확인 후, 동일한 JOB_KEY와 JOB_NAME이 있으면 종료하고, 없으면 계속 진행한다.
- 에러 메시지 : JobInstance must not already existm 출력
4. BATCH_JOB_INSTANCE 테이블에 동일한 JOB_INSTANCE가 없으므로, BATCH_JOB_INSTANCE 테이블에 JOB_INSTANCE 생성한다.(JOB_INSTANCE_ID 생성)
5. BATCH_JOB_EXECUTION 테이블에서 JOB_INSTANCE ID의 맨 마지막 ROW에서 JOB_INSTANCE의 상태(STATUS)가 COMPLETED가 아닐 경우 즉, FAILED일 경우에는 다시 시작하고, 그게 아닐 경우에는 에러 메시지를 출력하여 종료한다.(여기서 종료시키지 않으면, 이미 실행한 JOB이 다시 실행된다.)
6. BACTH_JOB_EXECUTION 테이블에서 동일한 JOB_INSTANCE_ID가 없으면 JOB_EXECUTION 생성(JOB_EXECUTION_ID 생성)
7. 해당하는 JOB의 STEP 실행
8. 종료
위의 2번부터 5번까지 왜 그러는지 이해가 되지 않는다면 아래의 링크에서 글을 보면 좋다.
스프링 배치(Spring Batch) 관련 DB TABLE
1. BATCH_JOB_EXECUTION
- 스프링 배치(Spring Batch) Job의 실행 결과가 저장이 된다.
- 스프링 배치(Spring Batch) Job의 실행결과(성공, 실패)의 데이터가 저장된다.
2. BATCH_JOB_EXECUTION_CONTEXT
- 스프링 배치(Spring Batch) Job이 실행되면서, JOB에 관한 정보들이 저장되는 곳이다.
3. BATCH_JOB_EXECUTION_PARAMS
- 스프링 배치(Spring Batch) Job의 파라미터가 저장되는 곳이다.
4. BATCH_JOB_INSTANCE
- 스프링 배치(Spring Batch) Job이 실행되면, JOB INSTANCE가 생성되는 곳이다.
- JOB_INSTANCE 생성
5. BATCH_STEP_EXECUTION
- 스프링 배치(Spring Batch) Job에 해당하는 STEP의 실행 결과가 저장이 된다.
- 스프링 배치(Spring Batch) Job의 해당하는 STEP의 실행결과(성공, 실패)의 데이터가 저장된다.
6. BATCH_STEP_EXECUTION_CONTEXT
- BATCH_JOB_EXECUTION_CONTEXT와 마찬가지로, 스프링 배치(Spring Batch) Job에 해당하는 STEP이 실행되면서, STEP에 관한 정보들이 저장되는 곳이다.
참고자료
https://www.fwantastic.com/2019/12/spring-batch-2-metadata-jobrepository.html
'IT > 스프링(Spring)' 카테고리의 다른 글
[스프링/Spring] 스프링 배치(Spring Batch) JUnit java.lang.IllegalStateException: Failed to load ApplicationContext 문제 해결 방법 (0) | 2022.04.13 |
---|---|
[스프링/Spring] 스프링(Spring) JNDI 예제 (0) | 2022.04.06 |
[스프링/Spring] 스프링 배치(Spring Batch) 파티셔닝(Partitioning) 예제 (0) | 2022.03.28 |
[스프링/Spring] 스프링 배치(Spring Batch) org.springframework.data.transaction.ChainedTransactionManager 세팅하는 방법 (0) | 2022.03.28 |
[스프링/Spring] 스프링 배치(Spring Batch) 적용하는 예제 (0) | 2022.03.27 |
[스프링/Spring] 스프링(Spring) DataSource 정리 (0) | 2022.03.27 |
[스프링(Spring)] pom.xml의 구조 (0) | 2022.03.13 |
이클립스 1개의 Tomcat에서 여러 모듈 올리는 방법 (0) | 2022.03.08 |
최근댓글