SpringBoot

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

ByteBridge 2023. 12. 26. 08:33
반응형

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

반응형