03. Spring Batch 기본개념 (기동, 기동 옵션)

2021. 4. 12. 13:57spring

728x90
반응형

가. Spring Batch 기동의 기본

- 배치 Job을 기동하면 Job 실행 오브젝트 (JobExecution 클래스)가 생성된다.

- JobExecution : Job의 실행정보를 보존해 두는 오브젝트, 커밋 등의 타이밍에서 실행정보를 DB에 보존.

- 실행정보 : Status, 실행결과, Job 실행 ID, JobInstance, 실행한 Step 정보 (StepExecution) 등

- DB에 보존한 JobExecution 정보가 있으므로, 과거 실행했던 Job에 대해 조작이 가능하다. 예를 들어 restart, stop 등의 조작이 가능하다.

- JobExecution 정보로써 Job실행 했을때의 ID (Job execution ID)가 생성된다. Job name과 Job parameter가 동일하여 JobInstance가 동일하다고 해도 이 Job 실행ID는 배치Job 실행할때마다 새로운 ID가 발번된다.

즉, 같은 JobInstance에 대해서 복수의 Job 실행ID가 존재할 수 있다.

나. 기동옵션사용 시의 주의점

기동옵션은 CLI에서 실행 시 하이픈으로 지정하는 옵션 (예를 들어 -restart)를 말한다.

[기동 사례 01] 이 기동의 Job실행ID : 122

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

[기동 사례 02] 재기동

java org.springframework.batch.core.launch.support.CommandLineJobRunner
     classpath:/example/launch-context.xml 122 -restart

Spring Batch에서 제공하는 기동 옵션은 과거에 실행한 기동에 대한 처리를 실행하기 위해 준비된 것임.
기존 실행했던 배치 job의 job id와 파라메터 정보를 이용하여 처리를 실행한다. 실행시 다른 파라메터 정보를 뒤에 설정해두어도 무시된다. 예를 들어 "name=taro date=2010/01/22"라는 파라메터를 설정해도 무시 당하고 기존 파라메터로 기동된다.

다. 기동옵션의 종류

옵션 동작   
-restart 실패했던 JobExecution을 , 또는 실행했던 step 부터 재실행.
Job실행ID(예: 122)를 지정한 경우, 지정한 JobExecution을 restart 한다.
다만 이미 실행성공한 jobExecution 처리의 경우, 실패하지 않았기 때문에 리스타트할수없다 라고 에러가 발생한다.
Job명(예: job1)을 지정한 경우, 같은 이름의 Job명을 가진 JobExecution을 검색해 실패한 것 중 가장 최신의 것을 검색한다. 만약 1건도 실패한 JobExecution이 없는 경우, 에러가 난다.
-next 처리의 성공/실패와 관계없이 강제적으로 최초부터 처리를 실행한다.
단, -next는 다른 옵션과 달리, 코맨드 기동 시 Job Parameter 기술이 가능하다.
기술한 파라메터를 이용해 JobExecution 당시의 파라메터를 overwrite 해서 실행한다.

기동 시 Job실행ID를 지정한 경우, 지정한 JobExecution처리 (Job명, Job파라메터)를 제일 최초를 실행한다.
기동 시 Job명을 지정한 경우, 이름이 같은 Job명을 가진 JobExecution처리 (Job명, Job파라메터)를 검색해 제일 최초를 실행한다.

-stop 처리중의 Job을 정지한다. 정지시킨 Job만이 restart 가능하다.
실제 DB의 JobExecution의 상태를 STOPPING으로 바꾸기만 한다.
기동중의 Job는 커밋 등의 타이밍에서 DB의 status를 조회하므로 그때 상태가 STOPPING으로 되어 있는 걸 확인하고, 정지처리를 시작한다.

기동 시 Job실행ID를 지정한 경우, 지정한 JobExecution처리 (Job명, Job파라메터)의 상태를 STOPPING으로 변경한다.

기동 시 Job명을 지정한 경우, 이름이 같은 Job명을 가진 JobExecution처리 (Job명, Job파라메터)를 검색해 전체의 status를 STOPPING으로 변경한다.
-abandon 정지한 Job를 ABANDON 상태로 변경한다. 동작은 -stop과 동일한다.
이 상태에서는 restart 가 불가능하다.

라. 기동 시 체크

- 기동 시 이미 실행 한 건지, 완료 한 건지 등의 체크가 끼어든다.

그 결과에 의해 에러가 발생해 처리가 중단되는 경우가 있다.

 

728x90
반응형