>  기사  >  Java  >  Spring 기반의 가장 간단한 예약 작업 구현 및 구성을 기반으로 한 cron 표현식 관련 내용

Spring 기반의 가장 간단한 예약 작업 구현 및 구성을 기반으로 한 cron 표현식 관련 내용

PHP中文网
PHP中文网원래의
2017-06-22 11:32:251477검색

원래 이 기사는 이 시리즈의 처음 두 기사와 함께 게재될 예정이었습니다. 그런데 어제 정보를 검색하고 정리하던 중 사고가 발생해서 조금 미뤘습니다.

이 글의 내용은 주로 다음 블로그 게시물을 참조합니다: (크론 표현에서 1위를 차지하는 Baidu 검색 링크). 남들과 조금 다른 글을 쓰려고 노력해보세요. 그래도 내용은 대부분 비슷해요.

예제부터 시작해 보겠습니다.

"0 0 10,14,16 * *?"은(는) 무슨 뜻인가요?

우선 Cron 표현식은 문자열이므로 문자열은 5~6개의 공백으로 구분되어 6~7개의 필드로 구분됩니다. Cron은 다음과 같은 두 가지 구문 형식을 갖습니다. Hours Dayofmonth Month Dayofweek Year 또는

초 MINUTES HOURS Dayofmonth Month Dayofweek


" 10 , 14, 16 여기서 ","는 목록, 열거형을 의미하며, 이는 10, 14, 16시간이 발생할 때마다 실행된다는 의미입니다. 다음 *는 이 필드의 모든 값과 일치함을 의미합니다. 분 단위인 경우 도메인은 *를 사용하며 이는 이벤트가 1분마다 트리거됨을 의미합니다.

그러면 "0 0 10,14,16 * * ?"의 마지막 "?"는 ?:를 의미하며 DayofMonth와 DayofWeek 두 필드에만 사용할 수 있습니다. 또한 도메인의 모든 값과 일치하지만 일치하지 않습니다. DayofMonth와 DayofWeek는 서로 영향을 미치기 때문입니다. 예를 들어, 매월 20일에 예약을 실행하려는 경우 20일이 어떤 요일인지에 관계없이 다음 쓰기만 사용할 수 있습니다. 13 13 15 20 * ?, 여기서 마지막 숫자만 사용할 수 있습니다. ? , 그러나 * 는 사용할 수 없습니다. * 를 사용하면 요일에 상관없이 발동된다는 뜻인데 실제로는 그렇지 않습니다.

그래서 " 0 0 10,14,16 * * ? "는 매일 10시, 14시, 16시에 트리거된다는 의미입니다.

그럼 다음 질문은:

"0 0/30 9-17 * * ?"

이 표현에는 이전 표현에 비해 기호가 두 개 더 있는데 하나는 "/"이고 다른 하나는 "입니다. -". 의미는 다음과 같습니다.

"-": 범위를 나타냅니다. 예를 들어 분 필드에 5-20을 사용하면 5분에서 20분까지 매분 트리거된다는 의미입니다.

"/": 트리거가 처음부터 시작됨을 나타냅니다. 예를 들어 분 필드에 5/20을 사용하면 5분마다 한 번씩 트리거되고 25분, 45분마다 한 번씩 트리거됩니다.

여기에서는 "0/30"입니다. "는 0분부터 30분마다 실행됨을 의미합니다. 1분마다 한 번씩 실행됩니다. 그리고 "9-17"은 범위를 표시합니다. 즉, 9시부터 17시까지 실행됩니다. 종합하면, "0 0/30 9-17 * * ?" 이 표현은 매일 9시부터 17시까지 30분 간격으로 실행된다는 의미입니다.

계속, 다음 질문:

여기 표현에는 Wednesday의 약어인 "WED"가 추가되어 있습니다

여기서 "0 0 12 ? * WED"는 매주 수요일 정오 12시를 의미하며 한 번은 시험입니다. 결과. (테스트 편의를 위해 10초 간격으로 시간을 변경합니다.)

본 글에 남은 cron 표현식은 이전 두 글의 예약된 작업에서 테스트하고 검증할 수 있습니다. 나머지 표현식은 하나씩 분석하지 않습니다. 다음은 몇 가지 질문에 답하기 위해 원문을 인용한 것입니다.

1. Cron 표현식 내용 분석

Cron 표현식은 문자열을 5 또는 6개의 공백으로 구분하고 6 또는 7로 나눕니다. 필드에서 각 필드는 다음과 같은 두 가지 문법 형식을 갖습니다.

Seconds Minutes Hours DayofMonth Month DayofWeek Year 또는

Seconds Minutes Hours DayofMonth Month DayofWeek


각 필드에 나타날 수 있는 문자는 다음과 같습니다. 초: ", - * /" 4자가 나타날 수 있으며, 유효한 범위는 0~59의 정수입니다.
분: ", - * /" 4자가 나타날 수 있으며, 유효한 범위는 0~59의 정수입니다.

Hours : ", - * /" 4자 표시 가능, 유효한 범위 0-23의 정수

DayofMonth: ", - * / ? L W C" 8자 표시 가능, 유효한 범위 0-31의 정수
월: 가능 ", - * / "4자, 유효한 범위 1-12 또는 JAN-DEc의 정수
DayofWeek: 나타날 수 있음 ", - * / ? L C #" 4자, 유효한 범위 1-7의 정수 또는 SUN-SAT 두 가지 범위. 1은 일요일, 2는 월요일 등을 의미합니다.
연도: ", - * /" 4자가 나타날 수 있으며, 유효한 범위는 1970-2099입니다. 그러나 다음과 같은 특수 문자도 나타날 수 있습니다. 의미는 다음과 같습니다.
(1)*: 이 필드의 값과 일치함을 나타냅니다. 분 필드에 *가 사용되면 이벤트가 1분마다 트리거된다는 의미입니다.

(2)?: DayofMonth 및 DayofWeek 필드에만 사용할 수 있습니다. 또한 도메인의 모든 값과 일치하지만 일치하지 않습니다. DayofMonth와 DayofWeek는 서로 영향을 미치기 때문입니다. 예를 들어, 매월 20일에 예약을 실행하려는 경우 20일이 어떤 요일인지에 관계없이 다음 쓰기만 사용할 수 있습니다. 13 13 15 20 * ?, 여기서 마지막 숫자만 사용할 수 있습니다. ? , 그러나 * 는 사용할 수 없습니다. * 를 사용하면 요일에 상관없이 발동된다는 뜻인데 실제로는 그렇지 않습니다.

(3)-: 범위를 나타냅니다. 예를 들어 분 필드에 5-20을 사용하면 5분부터 20분까지 매분 트리거된다는 의미입니다.

(4)/: 시작 시 트리거가 시작됨을 나타냅니다. 예를 들어, 분 필드에 5/20을 사용하면 5분마다 한 번씩 트리거되고 25분, 45분 등마다 한 번 트리거됩니다.

(5),: 목록을 의미합니다. 열거 값. 예를 들어 분 필드에 5,20을 사용하면 매분 5분과 20분에 트리거된다는 의미입니다.

(6)L: 마지막을 의미하며 DayofWeek 및 DayofMonth 필드에만 나타날 수 있습니다. DayofWeek 필드에 5L을 사용하면 마지막 목요일에 트리거된다는 의미입니다.

(7)W: 유효한 근무일(월요일~금요일)을 나타내며 DayofMonth 필드에만 나타날 수 있습니다. 시스템은 지정된 날짜에 가장 가까운 유효한 근무일에 이벤트를 트리거합니다. 예를 들어 DayofMonth에 5W를 사용하는 경우 5일이 토요일인 경우 가장 가까운 근무일인 4일인 금요일에 트리거됩니다. 5일이 일요일이면 6일(월)에 발동되고, 5일이 월요일~금요일이면 5일에 발동됩니다. 또 다른 점은 W의 최신 검색은 여러 달에 걸쳐 검색되지 않는다는 것입니다.

(8)LW: 이 두 문자를 함께 사용하면 특정 달의 마지막 근무일, 즉 마지막 금요일을 나타낼 수 있습니다.

(9)#: 매월 요일을 결정하는 데 사용되며 DayofMonth 필드에만 나타날 수 있습니다. 예를 들어, 4#2는 특정 달의 두 번째 수요일을 의미합니다.

몇 가지 예:
0 0 2 1 * ? *는 매월 1일 오전 2시에 작업을 예약하는 것을 의미합니다.
0 15 10 ? * MON-FRI는 월요일부터 매일 오전 10시 15분에 작업을 실행하는 것을 의미합니다. Friday
0 15 10 ? 6L 2002-2006은 2002년부터 2006년까지 매월 마지막 금요일 오전 10시 15분에 작업을 실행한다는 의미입니다. cron 표현식에는 공백으로 구분된 최소 6개(아마도 7개)의 시간 요소가 있습니다.

순서:

초(0~59)
분(0~59)
시간(0~23)
일(월)(0~31, 단, 월의 일수를 고려해야 함)
개월 (0~ 11)
일(주) (1~7 1=SUN 또는 SUN, MON, TUE, WED, THU, FRI, SAT)
연도(1970-2099)

각 요소는 값일 수 있습니다(예: 6) , 연속 간격(9-12), 간격(8-18/4)(/는 4시간마다를 의미), 목록(1,3,5), 와일드카드. "월"과 "요일" 두 요소는 상호 배타적이므로 둘 중 하나를 설정해야 합니까?

일부 하위 표현식에는 일부 범위나 목록이 포함될 수 있습니다.

예: 하위 표현식 공식(일( week))는 "MON-FRI", "MON, WED, FRI", "MON-WED, SAT"일 수 있습니다.

"*" 문자는 가능한 모든 값을 나타냅니다. ​​

따라서 "*"는 하위에 있습니다 - 월(month)이라는 표현은 각 달의 의미를 나타내며, 하위 표현(일(주))의 "*"는 각 요일을 나타냅니다.

"/" 문자는 증가폭을 지정하는 데 사용됩니다. 값

예: 표현식의 "0/15"(분)은 0번째 분부터 시작, 매 15분마다를 의미합니다.

하위 표현식(분)의 "3/20"은 3번째부터 시작함을 의미합니다. 분, 20분마다(it와 "3, 23, 43")는 같은 의미입니다


"?" 문자는 일(월)과 일(주)의 두 하위 표현에만 사용됩니다. 값이 지정되지 않았습니다

두 하위 표현식 중 하나가 다음인 경우 값을 지정한 후 충돌을 피하기 위해 다른 하위 표현식의 값을 "?"로 설정해야 합니다.


"L" 문자는 하위 표현식에서만 사용됩니다. 일(월)과 일(주)의 두 하위 표현은 단어입니다. "last"의 약어
그러나 두 하위 표현의 의미는 다릅니다.

일(월) 하위 표현에서 "L"은 해당 달의 마지막 날을 나타냅니다.

일(주) 자체 표현에서 "L"은 주의 마지막 날인 SAT를 나타냅니다. 즉 SAT

인 경우 "L" 앞에 특정 내용이 있으면 다른 의미가 있습니다

예: "6L"은 이번 달 말일로부터 6일을 의미하고 "FRIL"은 이번 달 마지막 금요일을 의미합니다

참고: " L" 매개변수, 목록이나 범위를 지정하지 마세요. 문제가 발생할 수 있습니다.

필드 허용 값 ​​특수 문자 허용
초 0-59 , - * /

분 0-59 , - * /

시간 0-23 , - * /
날짜 1-31, - * ? / L W C
월 1-12 또는 JAN-DEC, - * /
주 1-7 또는 SUN-SAT, - * ? / L C #
연도(선택 사항) , 1970-2099 , - * /


2. 크론 표현 예시:

"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 * * ?" 오후 2시 ~ 오후 2시 59분 1분마다 트리거
"0 0/5 14 * * ?" 매일 오후 2시부터 오후 2시 55분까지 5분마다 트리거
"0 0/5 14,18 * * ?" 매일 오후 2시 55분부터 오후 6시까지 5분마다 트리거됩니다.
"0 0-5 14 * * ?" 매일 오후 2시부터 오후 2시 55분까지 1분마다 트리거됩니다.
"0 10, 44 14 ? 3 WED"는 3월 매주 수요일 오후 2시 10분과 2시 44분에 트리거됩니다.
"0 15 10 ? * MON-FRI"는 월요일~금요일 오전 10시 15분에 트리거됩니다.
"0 15 10 15 * ? :매월 15일 오전 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" 세 번째 날 오전 10시에 트리거됨 매월 금요일: 15번의 트리거

위 내용은 Spring 기반의 가장 간단한 예약 작업 구현 및 구성을 기반으로 한 cron 표현식 관련 내용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.