티스토리 뷰
Quartz
Quartz는 미리 결정된 시간 또는 예약된 시간에 작업을 예약하고 실행하는데 사용할 수 있는데 오픈 소스 라이브러리이다. 간단한 interval , Cront 표현식을 사용하여 작업할 수 있다.
장점
- in-Memory, JDBC 방식 제공
- 스케줄러 간 클러스터링
- 시스템 Fail-over(Random 방식의 로드 분산처리)
- 기본 플러그인 제공(ShutdownHookPlugin, LoggingHistoryPlugin)
단점
- 완벽한 로드 분산처리 불가(Random 방식)
- GUI 환경 미지원
- 스케줄러 실행에 대한 히스토리 보관 미지원
- fixed delay 미지원
Quartz Maven Dependency
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.2</version>
</dependency>
Quartz Gradle Dependency
// https://mvnrepository.com/artifact/org.quartz-scheduler/quartz
implementation 'org.quartz-scheduler:quartz:2.3.2'
1. Quartz
Scheduler
- 스케줄러 관리
Job
- 스케줄러에 의해 실행
JobDataMap
- Job을 동작시키는데 필요한 Parameter 정보
JobDetail
- Job을 실행하기 위핸 실행 정보(그룹, 이름, JobDataMap)
Trigger
- Job 실행 조건
- Job(1) = Trigger(N) 구조 가능
- SimpleTrigger : 반복 횟수( 카운트 + 1 수행), 반복 간격(ms)
- CronTrigger : Cron 표현식
2. 공통 속성
모든 트리거 유형에는 추적하기 위한 키 속성이 있다. 그 외에도 공통적인 트리거 속성은 아래와 같다.
- jobKey : 트리거가 실행되는 작업ID
- startTime : 트리거의 일정이 처음 적용되는 시간
- endTime : 트리거의 일정이 더 이상 적용되지 않는 시간
Priority(우선순위)
- 트리거가 많이 있거나 트리거를 체크하는 워크스레드가 부족한 경우 Quartz가 같은 시간에 지정된 모든 트리거를 실행이 불가한 경우, priority 속성을 통해 지정할 수 있다. (디폴트 5)
- 트리거의 실행 시간이 동일한 경우에만 우선순위 비교
- 트리거의 작업이 복구 시 원래 트리거와 동일한 우선순위로 설정
Misfire(불발)
- 불발 시 Job이 실행되어야 하는 시간을 의미
- 스케줄러가 다운되어 작동하지 못할 때, 스레드 풀에 사용 가능한 스레드가 없는 경우 발생
3. SimpleTrigger
- 작업을 특정 시점에 정확히 한번 실행하거나 특정 시점에 특정 간격으로 반복해서 실행하는 경우에 사용
- 시작 시간, 종료 시간, 반복 횟수, 반복 간격이 포함
- 반복 횟수는 0 또는 양의 정수
- 반복 간격은 milliseconds
4. CronTrigger
필드 | 필수 | 값 | 허용 특수문자 |
초(Seconds) | Y | 0 ~ 59 | , - * / |
분(Minutes) | Y | 0 ~ 59 | , - * / |
시(Hours) | Y | 0 ~ 23 | , - * / |
일(Day-of-Month) | Y | 1 ~ 31 | , - * / ? L W |
월(Month) | Y | 0 ~ 11 or JAN ~ DEC | , - * / |
요일(Day-of-Week) | Y | 1 ~ 7 or SUN ~ SAT | , - * / ? L # |
년(Year) | N | empty or 1979 ~ 2099 | , - * / |
- '*' 모든 값 의미(매일, 매월, 매주 등)
- '?' 특정 값이 없음을 의미(일, 요일에서 사용가능)
- '-' 범위를 의미(MON-WED 값은 월요일에서 수요일)
- ',' 여러 개의 값을 의미(MON, WED, FRI 값은 월, 수, 금)
- '/' 증분을 의미, 분이라고 할 때 3/20 - 20분마다 3분에 시작을 의미 (3, 23, 43)
- 'L' 일 및 요일 필드에 허용되며 마지막을 의미 (마지막 일, 마지막 주)
- 'W' 주어진 요일에 가장 가까운 평일을 지정하는데 사용 (15W 값은 매월 15일에서 가장 가까운 평일)
- '#' 해당 월의 n번째 요일을 지정하는데 사용 (6#3 또는 FRI#3 값은 매월 3번째 금요일)
- 일 1~31의 값이 될 수 있지만 주어진 달이 며칠인지 주의 필요
Cron 표현식 | 설명 |
0 0/5 * * * ? | 5분 마다 실행 |
0 0 12 * * ? | 매일 12시에 실행 |
10 0/5 * * * ? | 10초를 기점으로 5분 마다 실행(10:00:10, 10:05:10 ...) |
0 30 10-13 ? * WED,FRI | 매주 수요일, 금요일 10~13시 30분에 실행(10:30, 11:30, 12:30, 13:30) |
0 0/30 8-9 5,20 * ? | 매월 5,20일에 8~9시 30분 마다 실행(8:30, 9:00, 9:30) |
0 0 12 ? * WED | 매주 수요일 12시에 실행 |
Cron Maker를 이용하여 표현식을 공부하거나, 검증하는데 사용하면 좋다
CronMaker
www.cronmaker.com
5. SchedulerListeners
스케줄러 자체 내에서 이벤트에 대한 알림을 수신(작업/트리거 추가, 제거, 오류, 종료 등)
6. Job Stores
- RAM JobStore : 손쉬운 사용과 성능이 우수하지만 종료 시 모든 스케줄 정보가 유실(휘발성)
- JDBC JobStore : JDBC를 통해 스케줄 정보를 데이터베이스에 보관이 가능하지만, RAMJobStore에 비해 구성이 복잡하고 빠르지 않다. (Quartz가 사용할 DataSource 이름 지정 필요)
7. Clustering
JDBC JobStore에서만 클러스터링 지원(부하 분산 및 작업 장애 조치)
8. Quartz Table
QRTZ_LOCKS : 작업 실행 인스턴스
QRTZ_JOB_DETAILS : 실행될 Job 정보(이름, 그룹, 클래스 등)
QRTZ_TRIGGERS : Job을 실행할 스케줄 Trigger 정보(Trigger 종류 구분 및 시간)
QRTZ_CRON_TRIGGERS : Cron Trigger 정보(Cron Expression, Time Zone)
QRTZ_SIMPLE_TRIGGERS : Simple Trigger 정보(반복 횟수, 간격)
QRTZ_CALENDARS : 달력 형태 스케줄러 정보(특정 범위에 스케줄을 동작시키지 않을 때 사용)
QRTZ_SCHEDULER_STATE : 스케줄러 상태 확인(LAST_CHECKIN_TIME이 CHECKIN_INTERVAL 간격으로 갱신)
QRTZ_FIRED_TRIGGERS : 실행된 Trigger 정보
QRTZ_PAUSED_TRIGGER_GRPS : 정지된 Trigger 정보

'프로그래밍 > Back end' 카테고리의 다른 글
[Back end] Spring Boot @Autowired null 에러 (0) | 2022.11.22 |
---|---|
[Back end] Java ExecutorService (0) | 2022.11.21 |
[Back end] Java Tutorial Map and HashMap (0) | 2022.03.25 |
[Back end] Java Tutorial ArrayList VS LinkedList (0) | 2022.03.20 |
[Back end] Java Tutorial Array VS ArrayList (0) | 2022.03.20 |
- 경력관리
- 개발환경
- 프로그래머
- effective java
- 소프트웨어공학
- SQL
- Maven
- 제주도 여행
- 자바스크립트
- 이직
- 성능분석
- 리액트 16
- Linux 명령어
- 오라클 내장 함수
- Java
- Eclipse
- Tomcat
- 자바
- 회고
- 정렬 알고리즘
- 오라클
- 리눅스 명령어
- javascript
- Collection
- 프로그래머스
- sort algorithm
- spring
- 제주도 3박4일 일정
- 리액트
- React
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |