====== JobLauncher ======
===== 개요 =====
JobLauncher는 배치작업을 실행시키는 역할을 한다. Job과 Job Parameters를 이용하여 요청된 배치 작업을 수행한 후 JobExecution을 반환한다.
===== 설명 =====
JobLauncher 인터페이스를 보면 Job과 Job Parameter를 이용하여 요청된 Job을 수행한 후 JobExecution을 반환되는 run메소드가 정의되어 있다.
public interface JobLauncher {
public JobExecution run(Job job, JobParameters jobParameters) throws JobExecutionAlreadyRunningException,
JobRestartException, JobInstanceAlreadyCompleteException, JobParametersInvalidException;
}
JobLauncher 인터페이스의 기본 구현 클래스로는 SimpleJobLauncher이 제공된다. SimpleJobLauncher클래스는 JobName과 JobParameter를 이용하여
[[egovframework:rte2:brte:batch_core:job_repository|JobRepository]]에서 Job의 실행시도를 나타내는 JobExecution을 획득하고 작업을 수행한다.
이를 이용한 jobLauncher 설정은 아래와 같다. JobExecution을 획득하기 위한 jobRepository의 설정이 필수이다.
JobLauncher는 taskExecutor 설정을 통해 Job을 동기적, 혹은 비동기적으로 실행할 수 있다. 별도로 설정하지 않으면 syncTaskExecutor클래스가 디폴트로 설정되어 동기적으로 아래와 같이 실행된다.
client에게 배치작업의 요청을 받게 되면 JobLauncher는 하나의 JobExecution을 획득하고, 그것을 배치작업을 실행하는 메소드에 전달하여 최종적으로 배치 작업 후 Client에게 JobExecution을 반환한다.
* 동기
{{:egovframework:rte2:brte:batch_core:joblauncher_sync.png|}}
위의 흐름은 간단하며 스케줄러에서 실행하면 잘 동작하지만, HTTP 요청에서 시작하려고 할 때 문제가 발생한다. 배치 작업의 특성상 처리시간이 오래 걸리는 작업이 많을 것이고,그 작업시간동안 HTTP 응답을 계속 기다리는 것은 좋지 않다.
이 경우에는 아래와 같이 SimpleJobLauncher가 Client에게 즉시 JobExecution을 반환하는 비동기식 동작 방법이 필요하다.
* 비동기
{{:egovframework:rte2:brte:batch_core:joblauncher_async.png|}}
JobLauncher 설정에서 SimpleAsyncTaskExecutor클래스를 통해 비동기로도 쉽게 설정할 수 있다.
Spring의 TaskExecutor 인터페이스의 모든 구현은 비동기로 실행하는 배치작업에 대한 제어의 목적으로 사용된다.
===== 참고자료 =====
*[[egovframework:rte2:brte:batch_example:sync_async|동기/비동기 처리 예제]]
*[[http://static.springsource.org/spring-batch/reference/html/configureJob.html#configuringJobLauncher]]