Quartz는 Java 기반의 강력한 오픈소스 스케줄링 라이브러리로, 정해진 시간이나 주기에 따라 자동으로 작업(Job)을 실행하는 기능을 제공합니다. 스프링 프레임워크와 통합하여 스프링 배치 작업을 정교하게 스케줄링할 수 있으며, 복잡한 스케줄링 요구사항과 작업 실행, 중단, 재개 등을 관리할 수 있습니다.
Quartz 개념 및 동작 요소
-
Job: 수행할 작업의 내용을 정의하는 인터페이스를 구현한 클래스입니다. 실제 실행할 작업 코드를 작성합니다.
-
JobDetail: Job 인스턴스를 정의하고 관리하는 객체입니다. Job의 이름, 그룹, 클래스 타입, JobDataMap(추가 데이터) 등을 설정합니다.
-
Trigger: 작업 실행 시점과 주기를 결정합니다. CronTrigger, SimpleTrigger 등이 있습니다.
-
Scheduler: Job과 Trigger를 등록하고 실행을 스케줄링하며, 작업 실행을 제어합니다.
스프링에서는 Quartz를 스프링 빈으로 등록해 관리하며, 스프링과의 통합을 위해 QuartzJobBean 클래스를 사용하는 것이 일반적입니다.
Quartz 주요 기능
-
작업 주기 설정 및 예약
-
작업 실행, 중단, 재개 기능 제공
-
여러 작업을 동시 실행 가능
-
작업 실패 시 복구(재실행) 설정 가능
-
작업 실행 결과 처리 및 관리
스프링 부트 + Quartz 배치 샘플 코드
아래는 스프링 부트 환경에서 Quartz를 사용하여 배치 작업을 10초마다 실행하는 간단한 예시입니다.
1. Maven 의존성 추가
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
2. Quartz Job 클래스 작성
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Job;
import org.springframework.stereotype.Component;
@Component
public class SampleJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("Quartz Job 실행 - 현재 시간: " + System.currentTimeMillis());
}
}
3. Quartz 스케줄러 설정 (Config 클래스)

import org.quartz.JobDetail;
import org.quartz.Trigger;
import org.quartz.CronScheduleBuilder;
import org.quartz.TriggerBuilder;
import org.quartz.JobBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
@Configuration
public class QuartzConfig {
@Bean
public JobDetail sampleJobDetail() {
return JobBuilder.newJob(SampleJob.class)
.withIdentity("sampleJob")
.storeDurably()
.build();
}
@Bean
public Trigger sampleJobTrigger() {
return TriggerBuilder.newTrigger()
.forJob(sampleJobDetail())
.withIdentity("sampleTrigger")
.withSchedule(CronScheduleBuilder.cronSchedule("0/10 * * * * ?")) // 10초마다 실행
.build();
}
@Bean
public SchedulerFactoryBean schedulerFactoryBean() {
SchedulerFactoryBean factory = new SchedulerFactoryBean();
factory.setJobDetails(sampleJobDetail());
factory.setTriggers(sampleJobTrigger());
return factory;
}
}
이 예제는 스프링 부트 환경에서 Quartz 스케줄러를 이용해 10초마다 SampleJob을 실행하는 기본 구성입니다. 필요하면 여러 개의 JobDetail과 Trigger를 등록해 복잡한 스케줄링을 쉽게 구현할 수 있습니다.
필요하면 스프링 배치 작업과 연동해 특정 배치 작업을 특정 시점에 Quartz로 트리거할 수도 있습니다.