[스프링배치] 잡의 실행 (JobLauncher, JobInstance, JobExecution, JobParameters)

반응형
728x90
반응형

잡의 실행

잡의 실행은 잡 러너 (Job Runner) 에서 시작된다. 잡 러너는 잡 이름과 여러 파라미터를 받아, 잡을 실행시킨다. 스프링 배치는 2가지 잡 러너를 제공한다.

 

1) CommandLineJobRunner

스크립트를 이용하거나 명령행에서 직접 잡을 실행할때 사용한다.

 

2) JobRegistryBackgroundJobRunner

스프링을 부트스트랩해서 기동한 자바 프로세스 내에서 Quartz 나 JMX 후크와 같은 스케줄러를 사용하여 잡을 실행할때 사용한다. JobRegistry 를 생성하는데 사용하는데, 이 JobRegistry는 스프링이 부트스트랩될 때 실행 가능한 잡을 가지고 있다.

 

3) JobLauncherCommandLineRunner

CommandRunner 구현체는 별도의 구성이 없으면 기본적으로 ApplicationContext 에 정의된 Job 타입의 모든 빈을 기동 시에 실행한다. 

spring.batch.job.enabled = true # 자동 생성
spring.batch.job.names = testJob, test2Job # , 구분으로 지정된 Job 실행, 만약 존재하지 않으면 모든 Job을 실행

 

사용자에 의해서 스프링 배치가 실행될 때 잡 러너를 사용하긴 하지만, 잡 러너는 프레임워크가 제공하는 표준 모듈이 아니다. 실제로 프레임워크를 실행할때 실제 진입점은 JobLauncher 인터페이스의 구현체다.

 

 

JobLauncher

스프링 배치는 SimpleJobLauncher 라는 단일 JobLauncher 만 제공한다. 배치 잡이 실행되면 JobInstance가 생성된다.

 

 

JobInstance

잡의 논리적 실행을 나타낸다.

 

1. 잡 이름
2. 잡에 전달돼 실행시에 사용되는 식별 파라미터

 

위 두가지 항목으로 식별된다. TestJob 이 매일 실행될때, 잡 구성은 한번만 하고 그 이후로 매일 새로운 파라미터를 잡에게 전달하여 실행함으로써 새로운 JobInstance 를 얻게된다. 만약 파라미터가 동일하게되면 새로운 JobInstance 를 얻지 못한다. JobInstance 는 성공적으로 완료된 JobExecution 이 있다면 완료된 것으로 간주한다.

 

JobInstance 의 상태는 BATCH_JOB_INSTANCE 테이블에서 조회가 가능하다.

 

 

JobExecution

잡 실행의 실제 시도를 의미한다. 잡의 상태를 가지고있다는 의미로 알고있으면 된다. 잡이 처음부터 끝까지 단번에 실행 완료되었다면 JobInstance 와 JobExecution 은 단 하나씩만 존재한다. 첫번째 잡 실행후 오류 상태로 종료되었다면 이전과 동일한 파라미터로 해당 JobInstance 를 실행하려고 시도할 때마다 새로운 JobExecution 이 생성된다.

 

스프링 배치가 잡을 실행할때 생성하는 각 JobExecution은 BATCH_JOB_EXECUTION 테이블에 저장된다.

JobExecution 이 실행될 때의 상태는 BATCH_JOB_EXECUTION_CONTEXT 테이블에 저장된다. 해당 테이블에 저장되기 때문에 잡에서 오류가 발생하면 스프링 배치는 이 정보를 가져와서 특정 지점부터 다시 잡을 시작할 수 있다.

 

위에서 배운 JobInstance, JobExecution 관계에 대한 정리는 아래의 포스팅을 참고하자.

https://devfunny.tistory.com/680?category=820618 

 

SpringBatch 에서 JobInstance, JobExecution 의 관계

들어가기전 JobInstance, JobExecution 의 개념은 알고가자. https://devfunny.tistory.com/476?category=820618 [스프링배치] 잡의 실행 (JobLauncher, JobInstance, JobExecution, JobParameters) 잡의 실행 잡..

devfunny.tistory.com

 

 

JobParameters

잡 실행시에 사용될 잡 파라미터다. 사용자가 배치 잡에게 파라미터를 전달하면 잡 러너는 JobParameters 인스턴스를 생성하는데, 해당 인스턴스는 잡이 전달받는 모든 컨테이너의 컨테이너 역할을 한다.

 

java.util.Map<String, JobParameter> 객체의 래퍼(wrapper) 객체이다. 해당 파라미터는 변환도 가능하다.

잡에 전달된 파라미터는 BATCH_JOB_EXECUTION_PARMAS  테이블에서 조회 가능하다.

 

JobParameters 에 전달된 파라미터 중 식별 파라미터와 식별하지 않을 파라미터를 구분할 수 있다. 식별에 사용되지 않을 파라미터 key 앞에 - 를 적으면 된다.

java -jar demo.jar executionDate(date) = 2021/09/06 -name=test

 

name 의 값이 변경되더라도 스프링 배치는 Date 가 동일하다면 기존 JobInstance 를 기반으로 새 JobExecution 을 얻는다. (새로운 잡으로 판단하지 않는다.)

 

 

반응형

Designed by JB FACTORY