Java/Java Study

Quartz 라이브러리 기본 구성

amungstudy 2025. 4. 5. 15:45

✅ Quartz의 기본 구성 요소

구성요소 설명
Job 실제로 수행할 작업을 정의한 인터페이스 (org.quartz.Job)
Spring에서는 @Component, @DisallowConcurrentExecution 등으로 관리 가능
JobDetail Job 인스턴스를 정의하고 구성하는 정보 객체 (Job의 클래스, 이름, 그룹, 데이터 등 포함)
Job 클래스에 대한 메타 정보라고 할 수 있고, 동일 Job이라도 파라미터 달리 해서 여러 개 만들 수 있음
Trigger Job이 언제 실행될지를 정의 (시간, 주기, 조건 등)
단일 Job에 여러 개도 붙을 수 있음
JobDataMap Job 실행 시 함께 전달할 데이터(Map 구조)
JobDetail과 Trigger 양쪽에서 설정 가능. 병합되어 Job에 전달됨
Scheduler Job과 Trigger를 등록하고, 정해진 시간에 Job을 실행하는 주체
SchedulerFactory Scheduler 인스턴스를 생성하는 팩토리 (보통 StdSchedulerFactory)
Spring Boot에서는 SchedulerFactoryBean을 통해 관리될 수 있다
quartz.properties Quartz 설정을 정의하는 설정 파일 (스레드 수, 저장소 설정, 클러스터링 등)
JobStore Job, Trigger, 실행 이력 등을 저장하는 저장소. 기본값은 RAMJobStore, RDBMS 사용시 JDBCJobStore
JDBC로 설정하면, Job 정보가 DB에 저장되어 재시작에도 유지됨 (RAMJobStore는 휘발성)

 

Quartz의 기본 동작 흐름

  1. quartz.properties를 기반으로 Quartz 설정을 로드함
  2. SchedulerFactory를 통해 Scheduler 인스턴스를 생성
  3. JobDetail + Trigger를 생성해 Scheduler에 등록
  4. Scheduler가 Trigger 조건을 감지해서 지정된 시점에 Job을 실행
  5. 실행 시, JobDataMap이 Job에 전달되어 필요한 데이터 활용 가능

✅ Quartz 의존성 추가 시 참고 (maven기준)

 

// https://mvnrepository.com/artifact/org.quartz-scheduler/quartz
implementation("org.quartz-scheduler:quartz:2.3.2")
// https://mvnrepository.com/artifact/org.quartz-scheduler/quartz-jobs
implementation("org.quartz-scheduler:quartz-jobs:2.3.2")

// 직접 라이브러리 의존성을 사용하지 않고 spring-boot-starter 를 사용할 수도 있다
// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-quartz
implementation("org.springframework.boot:spring-boot-starter-quartz:3.4.4")

 

✅ MySQL Table Schema 

직접 Quartz 테이블 생성을 해주는 것이 좋다

Quartz library 내부에서 sql 파일 확인 가능

  • org.quartz.impl.jdbcjobstore.table_[DB종류].sql

저는 tables_mysql_innodb 파일을 사용해주었습니다

 

 

 

 

 

참고 : https://velog.io/@tjeong/Quartz-%EC%82%AC%EC%9A%A9%EB%B2%95-%EA%B3%B5%EC%9C%A0