2009/06/16 - [Java/Jakarta Project] - [Quartz]Quartz의 CronTrigger를 이용한 Java 프로그램 스케쥴링...
이번에 프로젝트를 하면서 다시 스케쥴링이 포함되어
CronTrigger 의 CronExpression 에 대해 정확하게 이해할 필요가 있어서
영문 API 문서에 나와 있는 내용을 오역(절대 번역 아님...)해 보았다.
===========================================================================================
Field Name |
Allowed Values |
Allowed Special Characters |
Seconds |
0-59 |
, - * / |
Minutes |
0-59 |
, - * / |
Hours |
0-23 |
, - * / |
Day-of-month |
1-31 |
, - * ? / L W |
Month |
1-12 or JAN-DEC |
, - * / |
Day-of-Week |
1-7 or SUN-SAT |
, - * ? / L # |
Year (Optional) |
empty, 1970-2099 |
, - * / |
특수문자 “*”는 모든 값을 의미할 때 사용된다. 예를 들어, “*”가 “Minutes” 필드에 있다면 “매분”을 의미한다.
특수문자 “?”는 “Day-of-month”와 “Day-of-week” 필드에서 허용된다. 이것은 “정의된 값 없음”을 의미할 때, 사용된다. 이것은 둘 중 하나의 필드에 무엇인가를 설정해야만 할 때 유용하지만 그 외에는 쓰지 않는다.
특수문자 “-“는 범위를 지정할 때, 사용된다. 예를 들어 “Hours” 필드에 “10-12”가 있으면 “10시, 11시, 12시”를 의미한다.
특수문자 “/”는 증가되는 값을 표현할 때, 사용된다. 예를 들어 “Seconds” 필드에 “0/15”가 있으면 “0초, 15초, 30초, 45초”를 의미하고 “5/15”가 있다면 “5초, 20초, 35초, 50초”를 의미한다.
문자 “L”은 “Day-of-month”와 “Day-of-week” 필드에서 허용된다. 이 문자는 “last”의 약자이지만 두 필드에서 각각 다른 의미를 가지고 있다. 예를 들어, “L”이 “Day-of-month”에 있을 경우에는 “해당 월의 마지막 날”(1월31일, 윤년이 아닌 해의 2월28일)을 의미한다. 만약 “Day-of-week” 필드에 그것이 사용된다면, 그건은 간단히 “7” 또는 “토요일”을 의미한다. 그러나 “Day-of-week” 필드에서 다른 값의 뒤에 붙어서 사용되게 된다면, 그것은 “해당 월의 마지막 XXX일” – 예를 들어, “6L”은 “해당월의 마지막 금요일”을 의미한다. 문자 “L”을 옵션으로 사용할 때는 리스트나 범위 값을 설정하지 않는 것이 중요하다.
문자 “W”은 “Day-of-month” 필드에서 허용된다.
예를 들어 “Day-of-month” 필드에 “15W” 가 있다면 “해당 달의 15일에서 가장 가까운 주일”을 의미한다. 만약 15일이 토요일이라면, 트리거는 14일 금요일에 작동할 것이다. 15일이 일요일이라면, 작동은 16일 월요일에 일어날 것이고, 15일이 화요일이라면, 작동은 15일 화요일에 일어날 것이다. 그렇지만 “Day-of-month” 필드의 값으로 “1W”를 설정했고, 1일이 토요일이라면, 트리거는 월의 경계를 넘지 않고, 3일 월요일에 작동할 것이다. 문자 “W”는 “Day-of-month” 필드가 리스트나 범위 값이 아닌 싱글데이 일때만 설정이 가능하다.