Spring Batch - 13. JobLauncher

출처

목차

JobLauncher

Batch Job 을 실행시키는 역할

  • JobJobParameters 를 인자로 받으며 요청된 Batch 작업을 수행한 후 최종 Client 에게 JobExecution 을 반환한다.
  • Spring Batch 가 구동 되면 JobLauncher Bean 이 자동 생성된다.

JobLauncher 를 이용한 Job 실행

Spring boot Batch 에서는 JobLauncherApplicationRunner 가 자동적으로 JobLauncher 를 실행시킨다.

  • 동기적 실행
    • taskExecutor 를 SyncTaskExecutor 로 설정할 경우
    • JobExecution 을 획득하고 배치 처리를 최종 완료한 후 Client 에게 JobExecution 을 반환한다.
    • 스케줄러 에 의한 배치처리에 적합하다.
  • 비 동기적 실행
    • taksExecutor 가 SimpleAsyncTaskExecutor 로 설정할 경우
    • JobExecution 을 획득한 후 Client 에게 바로 JobExecution 을 반환하고 배치처리를 완료한다.
    • HTTP 요청 에 의한 배치처리에 적합하다. 배치 처리 시간이 길어질 경우 응답이 늦어지지 않도록 한다.
public interface JobLauncher {
public JobExecution run(Job job, JobParameters jobParameters) throws JobExecutionAlreadyRunningException,
JobRestartException, JobInstanceAlreadyCompleteException, JobParametersInvalidException;
}

동기적 방식

JobLauncher

@RestController
public class JobLaunchingController {

@Autowired
private Job job;

@Autowired
private JobLauncher jobLauncher;

@PostMapping(value = "/batch")
public String launch(@RequestBody Member member) throws Exception {

JobParameters jobParameters = new JobParametersBuilder()
.addString("id", member.getId())
.addDate("date", new Date())
.toJobParameters();

jobLauncher.run(job, jobParameters);

System.out.println("Job is completed");

return "batch completed";
}
}

실행 결과

비 동기적 방식

  • SimpleJobLauncher 는 Bean 으로 생성되지 않는다.
  • 때문에 BasicBatchConfigurer Bean 을 이용해 SimpleJobLauncher 객체를 가져오도록 한다.
@RestController
public class JobLaunchingController {

@Autowired
private Job job;

@Autowired
private JobLauncher simpleLauncher;

// 비 동기적 방식으로 실행하기 위해서는 BasicBatchConfigurer 객체가 필요
@Autowired
private BasicBatchConfigurer basicBatchConfigurer;

@PostMapping(value = "/batch")
public String launch(@RequestBody Member member) throws Exception {
JobParameters jobParameters = new JobParametersBuilder()
.addString("id", member.getId())
.addDate("date", new Date())
.toJobParameters();

// 다음과 같이 사용할 경우 ClassCastingException 오류를 발생한다.
SimpleJobLauncher jobLauncher = (SimpleJobLauncher)simpleLauncher;

// BasicBatchConfigurer 로부터 SimpleJobLauncher 객체를 가져온다.
SimpleJobLauncher jobLauncher = (SimpleJobLauncher) basicBatchConfigurer.getJobLauncher();
jobLauncher.setTaskExecutor(new SimpleAsyncTaskExecutor());
jobLauncher.run(job, jobParameters);

System.out.println("Job is completed");

return "batch completed";
}
}

실행 결과

Share