Files
spring-batch-quartz/batch-quartz/src/main/java/com/spring/infra/quartz/QuartzJobLauncher.java
2024-08-27 15:47:04 +09:00

73 lines
2.3 KiB
Java

package com.spring.infra.quartz;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.core.configuration.JobRegistry;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.lang.NonNull;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.stereotype.Component;
import lombok.RequiredArgsConstructor;
/**
* Quartz 작업을 실행하는 Spring Batch Job 실행기 클래스입니다.
*
* <p>이 클래스는 Quartz 스케줄러에 의해 호출되며, 지정된 Spring Batch Job을 실행합니다.</p>
*
* <p>주요 기능:</p>
* <ul>
* <li>JobRegistry에서 지정된 이름의 Job을 조회</li>
* <li>Job 실행을 위한 JobParameters 생성</li>
* <li>JobLauncher를 통한 Job 실행</li>
* </ul>
*
* @author mindol
* @version 1.0
* @see QuartzJobBean
* @see JobLauncher
* @see JobRegistry
*/
@Component
@RequiredArgsConstructor
public class QuartzJobLauncher extends QuartzJobBean {
private final JobLauncher jobLauncher;
private final JobRegistry jobRegistry;
private String jobName;
public void setJobName(String jobName) {
this.jobName = jobName;
}
/**
* Quartz 스케줄러에 의해 호출되는 메소드로, 실제 Job을 실행합니다.
*
* <p>이 메소드는 다음과 같은 작업을 수행합니다:</p>
* <ol>
* <li>JobRegistry에서 지정된 이름의 Job을 조회</li>
* <li>현재 시간을 기반으로 한 고유한 JobParameters 생성</li>
* <li>JobLauncher를 사용하여 Job 실행</li>
* </ol>
*
* @param context Quartz JobExecutionContext 객체
*/
@Override
protected void executeInternal(@NonNull JobExecutionContext context) throws JobExecutionException {
try {
Job job = jobRegistry.getJob(jobName);
JobParameters params = new JobParametersBuilder()
.addString("JobID", String.valueOf(System.currentTimeMillis()))
.toJobParameters();
jobLauncher.run(job, params);
} catch (Exception e) {
throw new JobExecutionException(e);
}
}
}