[java] Quartz Scheduler에서 여러 작업 동시 실행하기

Quartz Scheduler는 Java 기반의 오픈 소스 스케줄링 라이브러리로, 다양한 작업을 원하는 시간에 실행할 수 있습니다. 하지만 기본적으로는 작업을 순차적으로 실행하므로 여러 작업을 동시에 실행하려면 추가적인 설정이 필요합니다. 이번 포스트에서는 Quartz Scheduler에서 여러 작업을 동시에 실행하는 방법에 대해 알아보겠습니다.

1. Job 클래스 작성

먼저, 여러 작업을 동시에 실행하기 위해 각각의 작업을 별도의 Job으로 구현해야 합니다. 각 Job 클래스는 Quartz에서 제공하는 Job 인터페이스를 구현해야 합니다.

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

public class MyJob implements Job {
    
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        // 실행할 작업 내용을 구현합니다.
    }
}

각 Job 클래스는 execute 메서드 안에 실제 작업을 구현해야 합니다. 이 예제에서는 작업 내용을 간단히 표시하기 위해 주석 처리했습니다.

2. JobDetail 설정

다음으로는 각 Job을 실행하기 위한 JobDetail을 설정해야 합니다. JobDetail은 작업을 실행하기 위한 세부 정보를 가지고 있으며, JobBuilder를 사용하여 생성할 수 있습니다. JobDetail에는 Job 클래스와 해당 작업의 이름을 설정해야 합니다.

import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;

JobDetail jobDetail1 = JobBuilder.newJob(MyJob.class)
    .withIdentity("job1", "group")
    .build();

JobDetail jobDetail2 = JobBuilder.newJob(MyJob.class)
    .withIdentity("job2", "group")
    .build();

위의 예제에서는 MyJob 클래스를 사용하여 job1job2라는 이름의 JobDetail을 생성합니다. withIdentity 메서드를 사용하여 작업의 이름과 그룹을 설정할 수 있습니다.

3. Trigger 설정

마지막으로, 각 JobDetail을 실행할 Trigger를 설정해야 합니다. Trigger는 작업이 언제 실행될지를 정의하는 객체입니다. Quartz에서는 다양한 종류의 Trigger를 제공합니다.

import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.CronScheduleBuilder;

Trigger trigger1 = TriggerBuilder.newTrigger()
    .withIdentity("trigger1", "group")
    .withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(5))
    .build();

Trigger trigger2 = TriggerBuilder.newTrigger()
    .withIdentity("trigger2", "group")
    .withSchedule(CronScheduleBuilder.dailyAtHourAndMinute(10, 30))
    .build();

위의 예제에서는 SimpleScheduleBuilderCronScheduleBuilder를 사용하여 각각 초마다 실행되는 Trigger와 특정 시간마다 실행되는 Trigger를 생성합니다. withIdentity 메서드를 사용하여 Trigger의 이름과 그룹을 설정할 수 있습니다.

4. 스케줄러 실행

마지막으로, 생성한 JobDetail과 Trigger를 스케줄러에 등록하고 스케줄러를 시작해야 합니다.

import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;

SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();

scheduler.scheduleJob(jobDetail1, trigger1);
scheduler.scheduleJob(jobDetail2, trigger2);

scheduler.start();

위의 예제에서는 StdSchedulerFactory를 사용하여 스케줄러를 생성하고, scheduleJob 메서드를 사용하여 JobDetail과 Trigger를 등록합니다. 마지막으로 start 메서드를 호출하여 스케줄러를 시작합니다.

이제 여러 작업이 동시에 실행되는 Quartz Scheduler를 사용할 수 있습니다. 그러나 스케줄러는 애플리케이션을 종료하기 전에 명시적으로 중지해야 합니다.

scheduler.shutdown();

결론

Quartz Scheduler는 여러 작업을 동시에 실행하기 위한 강력한 기능을 제공합니다. 이 포스트에서는 Job 클래스 작성, JobDetail 설정, Trigger 설정, 스케줄러 실행을 통해 여러 작업을 동시에 실행하는 방법을 알아보았습니다. 다양한 기능을 제공하는 Quartz를 사용하여 스케줄링 작업을 효과적으로 관리할 수 있습니다.

참고 자료