본문 바로가기
프로그래밍/JAVA

Spring Quartz 표현식 정리

by 소나기_레드 2023. 12. 15.
반응형

 

Expression Format :

  Quartz Cron 표현 식은 공백으로 구분되는 6개 또는 7개의 필드로 구성됩니다. 각 필드의 순서는 다음과 같습니다.

 

[]  []  []  []  []  [요일]  [연도(생략가능)]

 

) * 0,30  * * * ? *    [의미] 매시 정각 및 30분에 Job을 수행합니다.

  각 필드는 숫자 또는 다음 표에서와 같은 각 특수 문자들을 이용한 값들을 가질 수 있습니다.

  특수 문자를 사용할 경우 “,” “-“는 동시에 사용할 수 있습니다. 예를 들어, “* 1-5,7,8 * * * ?” 은 매 1,2,3,4,5,7,8분 마다 Job을 수행합니다.

 

※ 주의 사항 :

- 일자를 나타내는 필드와 요일을 나타내는 필드는 동시에 설정 할 수 없습니다. 

  이 경우는 둘 중 하나의 필드는 "?"로 설정하여, 고려되지 않도록 하여야 합니다.

- 'C' 문자에 대한 구현은 완전하지 않습니다.

Field Name Mandatory? Allowed Values Allowed Special Characters
Seconds YES 0-59 , - * /
Minutes YES 0-59 , - * /
Hours YES 0-23 , - * /
Day of month YES 1-31 , - * ? / L W C
Month YES 1-12 or JAN-DEC , - * /
Day of week YES 1-7 or SUN-SAT , - * ? / L C #
Year NO empty, 1970-2099 , - * /

 

 

특수 문자 설명 :

 

* : 

매초, 매분, 매시, 매일, 매월, 매년을 의미입니다. 

예를 들어, 분을 나타내는 두 번째 필드가 "*"인 경우는 매분 수행한다는 의미입니다.

 

? : 

해당 필드를 고려하지 않는다는 의미입니다. 

일자를 나타내는 필드와 요일을 나타내는 필드는 동시에 설정 할 수 없습니다. 

이 경우는 둘 중 하나의 필드는 "?"로 설정하여, 고려되지 않도록 하여야 합니다.

 

- : 

일련의 범위를 나타낼 때 사용합니다. 

예를 들어 "10-12" 10,11,12를 의미합니다.

 

, : 

일련의 값들을 나열하기 위하여 사용합니다. 

예를 들어, 분을 나타내는 필드가 "1,3,5"설정되어 있을 경우, 1, 3, 5분에 Job이 수행된다는 의미입니다. 

요일의 경우는 요일을 나타내는 숫자나 문자열을 사용할 수 있습니다. 

예를 들어, 요일 필드의 "MON,WED,FRI"는 월요일, 수요일, 금요일에 Job이 수행된다는 의미입니다.

 

/ : 

초기치를 기준으로 일정한 값으로 증가 되는 값들을 나타낼 때 사용합니다. 

예를 들어, 초를 나타내는 필드의 "0/15" 0초를 시작으로 15초씩 증가하는 값들을 의미합니다.

즉, "0, 15, 30,45"와 동일한 의미입니다. 그리고 "5/15" "5, 20, 35, 50"과 같은 의미입니다.

"/"앞에 "*"를 사용할 경우는 "*" 0의 의미를 같습니다. ("*/5" == "0/5")

 

L : 

마지막을 나타내는 "last"의 약어로 일자 필드 및 요일 필드에서 사용 할 수 있으며, 필드마다 다른 의미를 나타냅니다. 

일자 필드에서 사용 시에는 그 달의 마지막 날짜를 나타냅니다. 

예를 들어, 1월은 31일이 마지막 날이고 2월은 28일이 마지막 날입니다. 그리고 요일 필드에서 "L"만을 사용할 경우는 7또는 SAT(토요일)을 나타냅니다. "L"앞에 숫자를 사용할 경우는 매달 마지막 XXX 요일이라는 의미를 같습니다. 

예를 들어, "6L"그 달의 마지막 금요일을 의미합니다.

 

     ※ 주의 사항 :

          L 옵션을 사용할 경우는 "," (리스트) 및 "-" (범위)를 같이 사용해서는 안됩니다. 

         이렇게 사용 할 경우는 에러는 발생하지 않으나 이상한 결과가 발생할 수 있습니다.

 

W : 

주중을 나타내는 "weekday"의 약어입니다. 

일자를 나타내는 필드에서 사용하며 주어진 일자에 근접한 Weekday (Monday-Friday)를 나타낼 때 사용합니다. 

예를 들어 "15W" 는 매달 15일에 근접한 Weekday 를 의미합니다. 만약 그 달의 15일이 토요일이라면 금요일인 14일 에 Job이 수행됩니다. 만약 그 달의 15일이 일요일 이라면 월요일인 16일에 수행 됩니다. 만약 15일이 수요일 이라면 15일에 수행됩니다. 그러나 "1W"로 설정되어 있고 1일이 토요일이라면 금요일인 이전달의 마지막 날이 아니라 3 후인 월요일에 수행됩니다.

 

      ※ 주의 사항 :

          L 옵션을 사용할 경우는 "," (리스트) 및 "-" (범위)를 같이 사용해서는 안됩니다.

      ※ "L" 과 "W"는 같이 사용("LW") 될 수 있으며, 그 달의 마지막 Weekday를 나타냅니다.

 

 # : 

그 달의 n 번째 요일을 나타내기 위하여 요일 필드에 사용합니다.

예를 들어 "6#3"은 3번째 금요일을 의미("6" = Friday, "#3" = 3번째)합니다. 다른 예로 "2#1"은 첫 번째 월요일을 "4#5"은 다섯 번째 수요일을 의미합니다. "4#5"의 경우 만약 그 달에 5번째 수요일이 없는 경우 해당 월에는 Job이 수행되지 않습니다.

 

C : 

"calendar"의 약자로 트리거에 설정된 Quartz Calendar에 의하여 해당 값이 결정됩니다. 

Calendar가 설정되어 있지 않으면, 트리거의 실행에 대하여 항상 허용하는 Calendar 설정된 것으로 간주합니다

 

Quartz Calendar (JDK Calendar가 아닙니다.)는 트리거와 관련이 있는 인터페이스입니다. Quartz Calendar 트리거에 의한 실행을 일정 기간/일자에 대하여 실행을 배제하는 기능을 구현 할 때 사용됩니다. 

예를 들어 매주 9시 30 발생하는 트리거가 있다고 할 때 Calendar를 이용하여 공휴일인 경우는 실행되지 않도록 할 수 있습니다.  

예를 들어, 일자(day-of-month) 필드에서 "5C" Calendar에 의하여 허용되는 5번째 일자 또는 다음 5번째 일자를 나타내며, 요일(day-of-week) 필드에서 "1C"Calendar 의하여 허용되는 첫 번째 요일 또는 다음 일요일을 의미합니다.

 

      ※ 요일 및 월을 나타내는 문자열은 대소문자를 구분하지 않습니다.

 

 

사용 예제 :

Expression Meaning
0 0 12 * * ? 매일 12 정각 실행
0 15 10 ? * * 매일 10시 15 실행
0 15 10 * * ? 매일 10시 15 실행
0 15 10 * * ? * 매일 10시 15 실행
0 15 10 * * ? 2005 2005년도에 한하여 매일 10시 15 실행
0 * 14 * * ? 매일 14부터 2 59분까지 매분 실행
0 0/5 14 * * ? 매일 14 정각 부터 2시 5 까지 매분 마다 실행
0 0/5 14,18 * * ? 매일 14 정각부터 14 55분까지 매5분 마다 그리고 6 정각부터 6 55분까지 매 5분 마다 실행
0 0-5 14 * * ? 매일 14 정각부터 2시 5까지 매분 마다 실행
0 10,44 14 ? 3 WED 3월 매주 수요일 14시 10과 14시 44 실행
0 15 10 ? * MON-FRI 매주 월요일부터 금요일 10시 15 실행
0 15 10 15 * ? 매달 15 10시 15 실행
0 15 10 L * ? 매달 마지막 날 10시 15 실행
0 15 10 ? * 6L 매달 마지막 금요일 10시 15 실행
0 15 10 ? * 6L 2002-2005 2002년부터 2005년 매달 마지막 금요일 10시 15 실행
0 15 10 ? * 6#3 매달 3번째 금요일 10 15분에 실행
0 0 12 1/5 * ? 매달 1일부터 5일 간격으로 12 실행
0 11 11 11 11 ? 매년 11 11 11  11분에 실행

 

출처 : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=estern&logNo=110010101624

 

반응형

댓글