Java/Jakarta Project2009. 8. 4. 15:26

이전에 Quartz 를 이용한 스케쥴링에 관한 글을 쓰면서 살짝 적어본적이 있었는데

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”에 있을 경우에는 해당 월의 마지막 날”(131, 윤년이 아닌 해의 228)을 의미한다. 만약 “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” 필드가 리스트나 범위 값이 아닌 싱글데이 일때만 설정이 가능하다.

 

문자 “#”“Day-of-week” 필드에서만 허용된다. 이 문자는 해당 월의 XXX일 중 몇번째를 의미할때 사용된다. 예를 들어, “Day-of-month” 필드에 “6#3”이 있으면 이것은 해당 월의 세번째 금요일을 의미한다.(“6” = 금요일, “#3” = 해당월의 세번째 것) 다른 예로, “2#1”해당 월의 첫번째 월요일“4#5”해당월의 다섯번째 수요일을 각각 의미한다. 만약 5번째 주가 없는 달에 “#5”으로 값을 설정해 둔다면, 해당 월에는 트리거의 작동의 일어나지 않게 된다. 문자 “#”를 사용할 시에는 반드시 “Day-of-week” 필드에 하나의 값만을 설정할 수 있다.(“3#1,6#3”은 허용되지 않는다.)

Posted by Huikyun