-
Quartz를 이용한 클러스터링 설정과 구현 방법SpringBoot 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 클러스터링은 복잡한 스케줄링 요구사항을 가진 대규모 시스템에서 매우 유용합니다. 이 설정을 통해 여러 서비스 인스턴스가 동일한 작업 스케줄을 공유하며, 한 인스턴스의 장애가 발생했을 때 다른 인스턴스가 작업을 이어받을 수 있습니다.반응형'SpringBoot' 카테고리의 다른 글
Spring Boot에서 RestControllerAdvice 사용 방법 (0) 2024.11.17 Spring Batch를 이용한 클러스터링과 분산 처리 설정 및 구현 방법 (0) 2023.12.26 Blocking IO 와 Non-Blocking IO (0) 2023.10.29 Java OOM 발생 시퀀스 (0) 2023.10.29 Java Heap 메모리 할당 과정 시퀀스 (0) 2023.10.29