본문 바로가기
SpringBoot

Quartz를 이용한 클러스터링 설정과 구현 방법

by ByteBridge 2023. 12. 26.
반응형

Spring Boot와 Quartz 스케줄러를 사용하여, 여러 서비스 인스턴스에서의 클러스터링을 구현하는 방법을 설명합니다. Quartz의 클러스터링 기능을 활성화하여, 여러 서비스 인스턴스가 동일한 작업 스케줄을 공유하고, 한 인스턴스에서 실패한 작업을 다른 인스턴스에서 이어받을 수 있도록 구성합니다.

의존성 추가

implementation 'org.springframework.boot:spring-boot-starter-quartz'

application.properties 설정

application.properties 파일에 Quartz와 데이터베이스 관련 설정을 추가합니다. 이 설정은 Quartz가 클러스터링 모드로 작동하도록 구성하는 데 필요합니다.

# 데이터베이스 설정
spring.datasource.url=jdbc:mysql://localhost:3306/quartz_db
spring.datasource.username=myUser
spring.datasource.password=myPassword

# Quartz 설정
spring.quartz.job-store-type=jdbc
spring.quartz.properties.org.quartz.scheduler.instanceId=AUTO
spring.quartz.properties.org.quartz.jobStore.isClustered=true
spring.quartz.properties.org.quartz.jobStore.clusterCheckinInterval=20000

Quartz 스케줄러 설정

Quartz 스케줄러를 설정하는 Java 설정 클래스를 작성합니다.

import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class QuartzConfig {

    @Bean
    public JobDetail sampleJobDetail() {
        return JobBuilder.newJob(SampleJob.class)
                .withIdentity("sampleJob")
                .storeDurably()
                .build();
    }

    @Bean
    public Trigger sampleJobTrigger(JobDetail jobDetail) {
        SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
                .withIntervalInSeconds(60)
                .repeatForever();

        return TriggerBuilder.newTrigger()
                .forJob(jobDetail)
                .withIdentity("sampleTrigger")
                .withSchedule(scheduleBuilder)
                .build();
    }
}

작업(Job) 정의

Quartz에서 실행할 작업을 정의합니다.

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

public class SampleJob implements Job {
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        // 작업 로직
        System.out.println("Executing Sample Job");
    }
}

클러스터링 확인

애플리케이션을 여러 인스턴스에서 실행한 후, Quartz 데이터베이스의 qrtz_fired_triggers 테이블을 확인하여 클러스터링이 제대로 작동하는지 확인할 수 있습니다. 각 인스턴스는 이 테이블에 자신이 실행한 작업의 레코드를 남깁니다

결론
Quartz 클러스터링은 복잡한 스케줄링 요구사항을 가진 대규모 시스템에서 매우 유용합니다. 이 설정을 통해 여러 서비스 인스턴스가 동일한 작업 스케줄을 공유하며, 한 인스턴스의 장애가 발생했을 때 다른 인스턴스가 작업을 이어받을 수 있습니다.

반응형