from Dictionary - Quartz
Quartz
스케쥴링 라이브러리
| 용어 | 분류 | 설명 |
|---|---|---|
| Job | 인터페이스 | 실행할 작업을 정의하는 인터페이스 |
| JobDetail | 인터페이스 | 실행될 작업을 정의하고 구성하는 인터페이스 |
| JobBuilder | 클래스 | JobDetail 인스턴스를 생성하는데 사용되는 유틸리티 클래스 |
| JobListener | 인터페이스 | 작업의 생명 주기 동안 발생하는 이벤트를 처리하는 인터페이스 |
| JobDataMap | 클래스 | 작업 실행시 필요한 데이터를 저장하는 맵(자료구조) |
| Trigger | 인터페이스 | 작업의 실행 시간을 결정하는 인터페이스 |
| CronTrigger | 인터페이스 | 복잡한 실행 스케줄을 정의할 수 있는 Trigger 인터페이스 |
| TriggerBuilder | 클래스 | Trigger 인스턴스를 생성하는데 사용되는 유틸리티 클래스 |
| SimpleScheduleBuilder | 클래스 | 간단한 실행 스케줄을 정의할 수 있는 클래스 |
| CronScheduleBuilder | 클래스 | 복잡한 실행 스케줄을 cron 표현식으로 정의할 수 있는 클래스 |
| Scheduler | 인터페이스 | 작업과 트리거를 관리하고 실행하는 인터페이스 |
| SchedulerFactory | 클래스 | Scheduler 인스턴스를 생성하는 클래스 |
Listener
Trigger
private static class QuartzTriggerListener implements TriggerListener {
@Override
public String getName() {
return "QuartzTriggerListener";
}
@Override
public void triggerFired(Trigger trigger, JobExecutionContext jobExecutionContext) {
log.info(" triggerFired [{}] {}", jobExecutionContext.getJobDetail().getKey().getGroup(), jobExecutionContext.getJobDetail().getKey().getName() );
}
@Override
public boolean vetoJobExecution(Trigger trigger, JobExecutionContext jobExecutionContext) {
log.info(" vetoJobExecution [{}] {}", jobExecutionContext.getJobDetail().getKey().getGroup(), jobExecutionContext.getJobDetail().getKey().getName() );
return false;
}
@Override
public void triggerMisfired(Trigger trigger) {
log.info(" triggerMisfired [{}] {}", trigger.getJobKey().getGroup(), trigger.getJobKey().getName());
}
@Override
public void triggerComplete(Trigger trigger, JobExecutionContext jobExecutionContext, Trigger.CompletedExecutionInstruction completedExecutionInstruction) {
log.info(" triggerComplete [{}] {}", jobExecutionContext.getJobDetail().getKey().getGroup(), jobExecutionContext.getJobDetail().getKey().getName() );
}
}
Job
private static class QuartzJobListener implements JobListener {
@Override
public String getName() {
return "QuartzJobListener";
}
@Override
public void jobToBeExecuted(JobExecutionContext jobExecutionContext) {
log.info(" jobToBeExecuted [{}] {}", jobExecutionContext.getJobDetail().getKey().getGroup(), jobExecutionContext.getJobDetail().getKey().getName() );
}
@Override
public void jobExecutionVetoed(JobExecutionContext jobExecutionContext) {
log.info(" jobExecutionVetoed [{}] {}", jobExecutionContext.getJobDetail().getKey().getGroup(), jobExecutionContext.getJobDetail().getKey().getName() );
}
@Override
public void jobWasExecuted(JobExecutionContext jobExecutionContext, JobExecutionException e) {
log.info(" jobWasExecuted [{}] {}", jobExecutionContext.getJobDetail().getKey().getGroup(), jobExecutionContext.getJobDetail().getKey().getName() );
}
}
CronExpression
* * * * * ?
- 가장 앞에 오는 단위는 초 (Seconds) 이다.
- 두번 째는 분 (Minutes) 을 나타낸다.
- 세번 째는 시 (Hours) 를 나타낸다.
- 네번 째는 일 (Day-of-Month, DOM) 을 나타낸다.
- 다섯번 째로 월 (Month) 에 대한 정보를 기술한다.
- 여섯번 째는 요일 (Day of Week) 을 나타낸다. 요일은 0~6 의 숫자로 쓸 수도 있지만 “MON”, “SUN” 과 같이 요일의 약자로 사용할 수도 있다.
-
마지막은 연도 (Year) 가 온다. 연도는 optional 이다.
- 와일드카드 (*) 문자는 “매 번” 을 의미한다
- 물음표 (?) 는 ‘설정값 없음’ 을 나타낸다. 이는 일 (DOM) 과 요일 (DOW) 에만 사용할 수 있다.
- 슬래쉬 (/) 는 값 증가 표현에 사용된다. 분 (Minutes) 항목에 “10/15” 라고 쓴다면, “10분 부터 시작해서 매 15분 마다” 를 의미한다.
- 샾 (#) 은 k#N 으로 사용되며, 이 달의 N번째 K요일을 의미한다. 요일 (DOW) 항목에 “5#2” 라고 적는다면, “이 달의 두번째 목요일” 을 뜻한다.
- 문자 “L” 은 마지막 (Last) 를 의미한다. L 은 일 (DOM) 과 요일 (DOW) 에만 사용할 수 있다. 예를 들어 일 (DOM) 항목에 L 이 사용된다면 단순하게 해당 월의 마지막 날을 의미한다. 조금 다른 방법으로도 사용되는데, 특정 값 뒤에 사용된다면 “이 달의 마지막 날”을 의미하게 된다. 예를 들어 요일에 “6L” 을 준다면, “이 달의 마지막 금요일” 을 의미하게 된다.
- 문자 “W” 는 해당 날로부터 가장 가까운 평일 (Weekday) 을 의미한다. 예를 들어 일 (DOM) 항목에 “10W” 라고 준다면, “이 달의 10째 날로부터 가장 가까운 평일” 을 의미한다.
- 각각의 단위는 범위나 목록으로 나타낼 수도 있다. 일 (DOM) 에 “1-15” 라고 적는다면 1일부터 15일까지를 뜻한다.
- 각각의 항목은 항목에 유효한 값만이 들어올 수 있다. 예를 들어 일은 1 ~ 31 사이의 숫자만 허용되고, 시간은 0 ~ 23 사이의 시간만 허용한다.
ex
- “0 0/5 * * * ?” : 매 시 5분마다 수행
- “10 0/5 * * * ?” : 10초 뒤 5분마다 수행
- “0 30 10-13 ? * WED,FRI” : 매 주 수요일과 금요일 10시 ~ 13시 30분에 수행
- “0 0/30 8-9 5,20 * ?” : 매 월 5일과 20일에 8시 ~ 9시대에 30분 간격으로 수행 (ex. 8:00, 8:30, 9:00, 9:30 에 수행)