Backend/Spring(활용)

Spring 기반 Quartz Scheduler 기본 예제 코드(2) - Quartz 설정 정보

개발자-제이 2025. 4. 4. 10:54

이전 발행글 

2025.04.03 - [Backend/Spring(활용)] - Spring 기반 Quartz Scheduler 기본 예제 코드(1) - 구조적 설계와 흐름 설명

 

Spring 기반 Quartz Scheduler 기본 예제 코드(1) - 구조적 설계와 흐름 설명

📌 목차 1. 전체 아키텍처 개요 2. AutowiringSpringBeanJobFactory 설명 3. QuartzConfig 설정 설명 4. AbstractSchedulerJob 구조 설명 5. TestSimpleJob 역할과 구성 6. TestSimpleProcessor (실제 Job 실행) 7. ApplicationRunner를 이

pjs-world.tistory.com

Github Quartz 관련 코드 

https://github.com/namic123/Quartz-Scheduler-Basic-Test

 

GitHub - namic123/Quartz-Scheduler-Basic-Test: Quartz Scheduler Basic Test

Quartz Scheduler Basic Test. Contribute to namic123/Quartz-Scheduler-Basic-Test development by creating an account on GitHub.

github.com

 

 

1. 📘 application.yml 전체 설명

spring:
  application:
    # 애플리케이션 이름 설정 (로깅, Spring Admin 등에서 식별자 역할)
    name: quartzSchedulerTest

  datasource:
    # Quartz Scheduler에서 사용할 H2 DB 접속 설정
    url: jdbc:h2:tcp://localhost/~/quartz-test
    driver-class-name: org.h2.Driver
    username: sa
    password:

  sql:
    init:
      # 애플리케이션 실행 시 SQL 스크립트 자동 실행 설정
      mode: always
      # Quartz 관련 테이블 정의 SQL 파일 위치
      schema-locations: classpath:tables_h2.sql

# 사용자 정의 섹션 - Quartz 설정 파일 경로 전달
setting:
  quartz:
    # Java 코드에서 properties 파일 경로로 참조함
    file-path: quartz.properties

 

2. ⚙️ quartz.properties 전체 설명

# ===============================
# ▶ Scheduler 설정
# ===============================

# 스케줄러 인스턴스 이름
org.quartz.scheduler.instanceName=QuartzScheduler
# 인스턴스 ID 자동 생성 (클러스터 구분용)
org.quartz.scheduler.instanceId=AUTO

# ===============================
# ▶ ThreadPool 설정
# ===============================

# 스레드풀 구현체 (SimpleThreadPool 사용)
org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
# 동시에 실행 가능한 Job 수
org.quartz.threadPool.threadCount=10
# 스레드 우선순위
org.quartz.threadPool.threadPriority=5

# ===============================
# ▶ JobStore 설정 (JDBC 기반)
# ===============================

# 트랜잭션 기반 JDBC JobStore
org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
# 일반 JDBC용 delegate 클래스 (H2 포함)
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
# 테이블 prefix (SQL DDL과 일치해야 함)
org.quartz.jobStore.tablePrefix=QRTZ_
# 클러스터 환경 지원
org.quartz.jobStore.isClustered=true

# ===============================
# ▶ DataSource 지정
# ===============================

# 사용할 DataSource 이름 지정
org.quartz.jobStore.dataSource=quartz

# ===============================
# ▶ Quartz 전용 DataSource 설정
# ===============================

# 커넥션 풀 provider (HikariCP)
org.quartz.dataSource.quartz.provider=hikaricp
# JDBC 드라이버
org.quartz.dataSource.quartz.driver=org.h2.Driver
# DB 접속 URL
org.quartz.dataSource.quartz.URL=jdbc:h2:tcp://localhost/~/quartz-test
# 사용자 계정
org.quartz.dataSource.quartz.user=sa
# 비밀번호 (없음)
org.quartz.dataSource.quartz.password=
# 최대 커넥션 수
org.quartz.dataSource.quartz.maxConnections=5

 

3. 🧱 tables_h2.sql 주요 테이블 요약

해당 SQL 파일은 Quartz Scheduler가 사용하는 내부 메타데이터 테이블을 정의한다. 주요 테이블 설명은 다음과 같다.

테이블명 설명
QRTZ_JOB_DETAILS 등록된 Job 클래스 및 속성 저장
QRTZ_TRIGGERS 트리거 공통 정보 저장
QRTZ_SIMPLE_TRIGGERS 반복 주기 기반 트리거 설정
QRTZ_CRON_TRIGGERS Cron 표현식 기반 트리거 설정
QRTZ_BLOB_TRIGGERS BLOB 직렬화 트리거 정보 저장
QRTZ_CALENDARS 휴일 캘린더 등 예외일자 정의
QRTZ_PAUSED_TRIGGER_GRPS 일시 중지된 트리거 그룹 목록
QRTZ_FIRED_TRIGGERS 실행 중/실행 이력 기록
QRTZ_SCHEDULER_STATE 각 인스턴스의 상태 추적 (클러스터링 용)
QRTZ_LOCKS 트랜잭션 락 및 동시성 제어

해당 DDL에는 수많은 외래키 제약조건과 인덱스도 포함되어 있어, 성능 및 안정성을 함께 고려한 구조를 가지고 있다. 이 구조는 Quartz의 클러스터링, 미스파이어 처리, 트리거 우선순위 관리에 중요한 역할을 한다.

 

✅ 마무리 요약

 

항목 설명
application.yml Spring Boot 설정 및 Quartz 외부 properties 파일 경로 지정
quartz.properties Quartz 스케줄러 세부 구성 (JobStore, ThreadPool, DataSource 등)
tables_h2.sql Quartz가 사용하는 메타 테이블 정의 SQL 스크립트 (H2 기준)
실행 환경 Spring Boot + H2 DB + JDBC 기반 Quartz + 클러스터링 활성화 구성

 

 

반응형