[java] Quartz Scheduler를 사용한 배치 작업 처리

Quartz Scheduler는 자바 기반의 오픈 소스 라이브러리로, 배치 작업을 스케줄링하고 실행하는 데 사용됩니다. 이 글에서는 Quartz Scheduler를 사용하여 배치 작업을 처리하는 방법에 대해 알아보겠습니다.

1. Quartz Scheduler 라이브러리 추가하기

먼저 Quartz Scheduler를 사용하기 위해 프로젝트에 해당 라이브러리를 추가해야 합니다. Maven을 사용하는 경우, pom.xml에 다음과 같은 의존성을 추가합니다:

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.3.2</version>
</dependency>

Gradle을 사용하는 경우, build.gradle에 다음과 같은 의존성을 추가합니다:

dependencies {
    implementation 'org.quartz-scheduler:quartz:2.3.2'
}

의존성을 추가한 후, 이클립스나 인텔리제이와 같은 IDE에서 프로젝트를 Refresh 또는 Sync 해주어 라이브러리가 정상적으로 추가되도록 합니다.

2. Quartz Job 클래스 작성하기

다음으로, 배치 작업을 처리하기 위해 Quartz Job 클래스를 작성해야 합니다. Quartz Job 클래스는 execute 메서드를 구현하여 실제로 수행할 작업을 정의합니다.

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class MyJob implements Job {

    public void execute(JobExecutionContext context) throws JobExecutionException {
        // 배치 작업을 수행하는 코드 작성
        // 예: 데이터베이스에서 데이터 조회 후 처리
        System.out.println("배치 작업이 실행되었습니다.");
    }
}

MyJob 클래스는 Job 인터페이스를 구현하고 execute 메서드를 재정의합니다. 이 메서드 내에 실제로 수행할 작업을 작성합니다.

3. Quartz Scheduler 설정하기

Quartz Scheduler를 설정하기 위해 스케줄러를 생성하고 JobDetail과 Trigger를 설정해야 합니다. 다음은 스프링 프레임워크를 사용하여 Quartz Scheduler를 설정하는 예제입니다:

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

public class SchedulerExample {
    public static void main(String[] args) {
        try {
            // 스케줄러 생성
            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

            // JobDetail 생성
            JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
                    .withIdentity("myJob", "group1")
                    .build();

            // Trigger 생성
            Trigger trigger = TriggerBuilder.newTrigger()
                    .withIdentity("myTrigger", "group1")
                    .startNow()
                    .withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(10))
                    .build();

            // 스케줄러에 JobDetail과 Trigger 등록
            scheduler.scheduleJob(jobDetail, trigger);

            // 스케줄러 실행
            scheduler.start();
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }
}

스케줄러를 생성하고, JobDetailTrigger를 생성하여 스케줄러에 등록합니다. 위의 예제에서는 MyJob 클래스를 실행하고, 10초마다 반복 실행하는 Trigger를 설정하였습니다.

4. 실행 확인

Quartz Scheduler를 실행하면 배치 작업이 예정된 시간에 실행됩니다. MyJob 클래스에서는 단순히 콘솔에 메시지를 출력하는 것으로 표현하였으므로, 배치 작업이 실행되었는지 확인하기 위해 콘솔 로그를 확인할 수 있습니다.

배치 작업이 실행되었습니다.
배치 작업이 실행되었습니다.
배치 작업이 실행되었습니다.
...

결론

Quartz Scheduler를 사용하여 자바 애플리케이션에서 배치 작업을 처리할 수 있습니다. Quartz Scheduler를 적절하게 구성하여 반복적인 작업을 스케줄링하고 실행하는데 활용할 수 있습니다.

참고 자료