Files
spring-batch-quartz/batch-quartz/src/main/java/com/spring/infra/quartz/QuartzJobLauncher.java
mindol1004 868bb01453 commit
2024-10-21 17:59:04 +09:00

99 lines
3.3 KiB
Java

package com.spring.infra.quartz;
import org.quartz.JobDataMap;
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 lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
/**
* 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
*/
@Slf4j
@RequiredArgsConstructor
public class QuartzJobLauncher extends QuartzJobBean {
/**
* JobParameters의 인스턴스 키입니다.
*
* <p>Job 실행 시 사용되는 인스턴스 ID를 저장합니다.</p>
*/
private static final String JOB_PARAMETERS_INSTANCE_KEY = "InstanceId";
/**
* JobParameters의 타임스탬프 키입니다.
*
* <p>Job 실행 시 현재 시간을 저장합니다.</p>
*/
private static final String JOB_PARAMETERS_TIMESTAMP_KEY = "timestamp";
/**
* JobLauncher 객체입니다.
*
* <p>Spring Batch Job을 실행하는 데 사용됩니다.</p>
*/
private final JobLauncher jobLauncher;
/**
* JobRegistry 객체입니다.
*
* <p>Spring Batch에서 등록된 Job을 조회하는 데 사용됩니다.</p>
*/
private final JobRegistry jobRegistry;
/**
* Quartz 스케줄러에 의해 호출되는 메소드로, 실제 Job을 실행합니다.
*
* <p>이 메소드는 다음과 같은 작업을 수행합니다:</p>
* <ol>
* <li>JobRegistry에서 지정된 이름의 Job을 조회</li>
* <li>현재 시간을 기반으로 한 고유한 JobParameters 생성</li>
* <li>JobLauncher를 사용하여 Job 실행</li>
* </ol>
*
* @param context Quartz JobExecutionContext 객체
* @throws JobExecutionException Job 실행 중 발생할 수 있는 예외
*/
@Override
protected void executeInternal(@NonNull JobExecutionContext context) throws JobExecutionException {
JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
String jobName = jobDataMap.getString("jobName");
try {
Job job = jobRegistry.getJob(jobName);
JobParameters params = new JobParametersBuilder()
.addString(JOB_PARAMETERS_INSTANCE_KEY, context.getScheduler().getSchedulerInstanceId())
.addLong(JOB_PARAMETERS_TIMESTAMP_KEY, System.currentTimeMillis())
.toJobParameters();
jobLauncher.run(job, params);
} catch (Exception e) {
log.error("Job execution exception! - {}", e.getMessage(), e);
throw new JobExecutionException(e);
}
}
}