02. Spring Batch 기본개념 (JobInstance)

2021. 4. 12. 11:56spring

728x90
반응형

02.Spring Batch의 기본개념(JobInstance)

가. JobInstance 의 개념

SpringBatch의 독자적인 개념으로, "기동한 Job을 구별하기 하기 위한 개념"이다.

Job Id와 파라메터의 조합구성이 같은 경우, 같은 JobInstance 라고 정의.

나. 구체적 사례

JobInstance는 DB에 보존되어 ID가 발번 된다.

ID가 같은 JobInstance와 같은걸로 취급된다.

Spring Batch 기동방법

java org.springframework.batch.core.launch.support.CommandLineJobRunner classpath:/example/launch-context.xml job1 name=taro date=2010/01/21

CommandLineJobRunner 클래스는 메인 클래스로 Spring Batch 프레임워크에서 제공하는 클래스이다.
"launch-context.xml" 는 배치 잡의 설정 파일 이며,
"job1" 은 Job ID (Job 명) 이고,
"name=taro date=2010/01/21" 은, Job Parameter 임.

예를 들어 이하의 경우 두가지 경우는 같은 JobInstance 이다.
 ・"job1 name=taro date=2010/01/21"
 ・"job1 date=2010/01/21 name=taro"

이하의 경우는 다른 JobInstance 이다.
 ・"job1 date=2010/01/25 name=taro"
 ・"job1 date=2010/01/21 name=hanako"
 ・"job2 date=2010/01/25 name=taro"

다. JobInstance와 배치처리의 관계

ㄱ. 기본 사상
기본적인 개념은 같은 Job의 기동은 제한된다.
(물론 우회적으로 이러한 제한을 회피하는 방법은 있다.)

  • 스프링배치는 배치처리는 파라메터에 의해 처리대상 데이터가 결정된다는 사상을 가지고 있다.

  • 파라메터로 "date=2010/01/21" 로 지정한 경우, 2010/01/21 의 데이터만 처리대상으로 삼고, 그밖의 날짜 데이터에는 영향을 주지 않는다. 그러기 위해 같은 JobInstance는 기동되지 않도록 제한하는 듯 하다.

  • JobInstance의 기동은 이미 성공한 경우에는 재차 기동할 필요가 없고 실패한경우에만 restart 될 수 있도록 설계되어 있다.

    ㄴ. 사례
    a. 사례1 : 같은 Job Id (Job 명), 파라메터로 2회 실행
    기동 1: "job1 date=2010/01/21 name=taro"
    -> 무사히 실행 완료

    기동 2: "job1 date=2010/01/21 name=taro"
    2회째 배치 기동 시
    이 경우, 두번째 실행시 "이미 완료 되었습니다." 라는 에러가 발생 후, 기동 불가

    b. 사례2 : 다른 Job Id (Job 명), 파라메터로 2회 실행
    기동 1: "job1 date=2010/01/21 name=taro"
    -> 무사히 실행 완료

    기동 2: "job1 date=2010/01/22 name=taro"
    2회째 배치 기동 시
    이경우, 문제 없이 기동

c. 사례3 : 같은 Job Id (Job 명), 파라메터로 2회째 실행
기동 1: "job1 date=2010/01/21 name=taro"
-> 처리 중

기동 2: "job1 date=2010/01/21 name=taro"
2회째 배치 기동 시
이 경우, 두번째 실행시 "Job이 처리중입니다." 라는 에러가 발생 후, 기동2는 기동 불가

d. 사례4 : 다른 Job Id (Job 명), 파라메터로 2회째 실행
기동 1: "job1 date=2010/01/21 name=taro"
-> 처리중

기동 2: "job1 date=2010/01/22 name=taro"
2회째 배치 기동 시
이경우, 문제 없이 기동

라. 정리
JobInstance는 기동을 제한함으로써 데이터를 지키기 위해 도입한 개념이다.
그러나 실제로 적용해보면 실제 배치 처리와 맞지 않은 경우도 있다.

예를 들면, "매시간 실행되어 매 실행시 종료되지않은 모든 데이터를 처리한다" 라는 배치도 실제로 존재한다.
이경우는 Job Parameter가 필요없지만, Job Parameter 없이 설계를 하면 2회째 배치기동에서 에러가 발생하고 만다.

이러한 문제를 해결하기 위해서 dummy Job Parmeter를 준비해서 자동으로 시퀀스번호와 날짜등을 설정하는 설계를 하면 될듯하다.

728x90
반응형