Quartz는 Java 기반의 강력한 오픈소스 스케줄링 라이브러리 사용방법

Quartz는 Java 기반의 강력한 오픈소스 스케줄링 라이브러리로, 정해진 시간이나 주기에 따라 자동으로 작업(Job)을 실행하는 기능을 제공합니다. 스프링 프레임워크와 통합하여 스프링 배치 작업을 정교하게 스케줄링할 수 있으며, 복잡한 스케줄링 요구사항과 작업 실행, 중단, 재개 등을 관리할 수 있습니다.​

Quartz 개념 및 동작 요소

  • Job: 수행할 작업의 내용을 정의하는 인터페이스를 구현한 클래스입니다. 실제 실행할 작업 코드를 작성합니다.

  • JobDetail: Job 인스턴스를 정의하고 관리하는 객체입니다. Job의 이름, 그룹, 클래스 타입, JobDataMap(추가 데이터) 등을 설정합니다.

  • Trigger: 작업 실행 시점과 주기를 결정합니다. CronTrigger, SimpleTrigger 등이 있습니다.

  • Scheduler: Job과 Trigger를 등록하고 실행을 스케줄링하며, 작업 실행을 제어합니다.

스프링에서는 Quartz를 스프링 빈으로 등록해 관리하며, 스프링과의 통합을 위해 QuartzJobBean 클래스를 사용하는 것이 일반적입니다.​

Quartz 주요 기능

  • 작업 주기 설정 및 예약

  • 작업 실행, 중단, 재개 기능 제공

  • 여러 작업을 동시 실행 가능

  • 작업 실패 시 복구(재실행) 설정 가능

  • 작업 실행 결과 처리 및 관리​


스프링 부트 + Quartz 배치 샘플 코드

아래는 스프링 부트 환경에서 Quartz를 사용하여 배치 작업을 10초마다 실행하는 간단한 예시입니다.

1. Maven 의존성 추가

xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

2. Quartz Job 클래스 작성

java
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 클래스)

java
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로 트리거할 수도 있습니다.​