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의 기본 동작 흐름
- quartz.properties를 기반으로 Quartz 설정을 로드함
- SchedulerFactory를 통해 Scheduler 인스턴스를 생성
- JobDetail + Trigger를 생성해 Scheduler에 등록
- Scheduler가 Trigger 조건을 감지해서 지정된 시점에 Job을 실행
- 실행 시, 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