Quartz Scheduler는 Java 기반의 작업 스케줄링 라이브러리로, 작업(Job)을 설정된 시간대나 주기에 따라 실행할 수 있습니다. 기본적으로 Quartz Scheduler는 작업을 순차적으로 처리하지만, 때로는 여러 작업을 동시에 병렬로 처리해야 할 수도 있습니다. 이러한 경우를 위해 Quartz Scheduler에서 작업 간의 병렬 처리를 설정하는 방법에 대해 알아보겠습니다.
1. 작업의 병렬 처리 설정
Quartz Scheduler에서 작업을 병렬로 처리하려면 JobDetail
객체의 JobBuilder
를 사용하여 작업을 생성하는 과정에서 setJobData
메서드를 사용하여 concurrentExecutionDisallowe
와 requestsRecovery
속성을 설정해야 합니다.
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
public class ParallelJob implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException {
// 작업 내용
}
public static void main(String[] args) throws SchedulerException {
JobDetail job = JobBuilder.newJob(ParallelJob.class)
.withIdentity("parallelJob")
.usingJobData("concurrentExecutionDisallowe", false)
.usingJobData("requestsRecovery", true)
.build();
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("parallelTrigger")
.startNow()
.build();
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
}
}
concurrentExecutionDisallowe
속성을 true
로 설정하면, 동일한 작업이 동시에 여러 번 실행되는 것을 방지할 수 있습니다. requestsRecovery
속성을 true
로 설정하면, 작업이 실행 중인 서버가 중단되었다가 다시 시작될 경우에도 작업이 복구되어 중단된 지점부터 다시 실행됩니다.
2. 스레드 풀 설정
Quartz Scheduler는 내부적으로 작업을 처리하는 데에 스레드 풀(Thread Pool)을 사용합니다. 병렬 처리를 위해 사용되는 스레드 풀의 크기를 조정할 수 있습니다. 기본적으로 Quartz Scheduler는 org.quartz.threadPool.threadCount
속성을 사용하여 스레드 풀의 크기를 설정하며, 이 값을 조정하여 병렬 처리의 정도를 조절할 수 있습니다.
quartz.properties 파일에 다음과 같이 스레드 풀의 크기를 설정할 수 있습니다.
org.quartz.threadPool.threadCount = 10
위의 예시에서는 스레드 풀의 크기를 10으로 설정하였습니다. 작업의 복잡도나 실행 시간에 따라 적절한 스레드 풀의 크기를 설정해야 합니다.