매일 봄 크론 표현 1 : 01 : am


202

Spring cron 표현식을 기반으로 고정 일정에 따라 코드를 실행하려고합니다. 매일 1 : 01 : am에 코드를 실행하고 싶습니다. 나는 다음과 같은 표현을 시도했지만 이것은 나에게 해가되지 않았다. 여기 구문에 어떤 문제가 있습니까?

@Scheduled(cron = "0 1 1 ? * *")
public void resetCache() {
    // ...
}



내 cron 식 0 0 0 1 JAN MON은 작년까지 작동했습니다. 1 월 1 일부터 유효하지 않은 cron 표현식을 말하는 작업이 중지됩니다. 이것은 빈도를 낮추기 위해 고안되었지만 tc 서버를 실행할 수있었습니다. 1 월 1 일 이후에는 그렇지 않았다. 0 0 7로 변경했을 때? * 일이 시작되었습니다. JAN MON이 작년 1 월에 잘 작동했던 곳에서 왜 일을 멈췄는지 궁금합니다.
5

0 0 0 1 JAN MON은 잘못된 표현 일 수 있습니다. 이것에서도 잘 작동하고 tc 서버는 불평하지 않습니다
spandey

답변:


573

시도해보십시오 :

@Scheduled(cron = "0 1 1 * * ?")

아래는 봄 포럼에서 예제 패턴을 찾을 수 있습니다.

* "0 0 * * * *" = the top of every hour of every day.
* "*/10 * * * * *" = every ten seconds.
* "0 0 8-10 * * *" = 8, 9 and 10 o'clock of every day.
* "0 0 8,10 * * *" = 8 and 10 o'clock of every day.
* "0 0/30 8-10 * * *" = 8:00, 8:30, 9:00, 9:30 and 10 o'clock every day.
* "0 0 9-17 * * MON-FRI" = on the hour nine-to-five weekdays
* "0 0 0 25 12 ?" = every Christmas Day at midnight

Cron 표현식은 6 개의 필드로 표시됩니다.

second, minute, hour, day of month, month, day(s) of week

(*) 어떤 것과도 일치

*/X "모든 X"를 의미

?( "특정 값 없음")-문자가 허용되는 두 필드 중 하나에서 다른 것을 제외하고 무언가를 지정해야 할 때 유용합니다. 예를 들어, 특정 요일 (예 : 10 일)에 트리거를 실행하려고하지만 어떤 요일에 상관하지 않으면 "10"을 입력합니다. 월 필드와 "?" 요일 필드에

추신 : 작동하게하려면 응용 프로그램 컨텍스트에서 활성화해야합니다 : https://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/scheduling.html#scheduling- 주석 지원


15
형식은 또한 봄 자체에 문서화되어 있습니다 -docs.spring.io/spring/docs/3.0.x/api/org/springframework/…
chrismarx

1
나는 스프링 크론이 초를 제공 할 수 있다고 생각하지만 일반적인 유닉스 크론은 분 단위입니다 ... 유닉스 맨 페이지에서 분은 구성 할 수있는 가장 작은 시간 단위입니다.
nanosoft

8
"의 의미는 무엇입니까?" 캐릭터? "요일"필드에만 적용됩니까? 우리가 '를 대체하면 작동합니까 / 다른 것입니까? 크리스마스 예에서 '*'로?
encrest 2016 년

1
@encrest 여기를보세요 : stackoverflow.com/questions/11499740/…
gipinani


90

내 스케줄러의 경우 매일 오전 6시에 발사하기 위해 사용하고 있으며 cron 표기법은 다음과 같습니다.

0 0 6 * * *

1 : 01 : am을 원한다면로 설정하십시오.

0 1 1 * * *

스케줄러의 전체 코드

@Scheduled(cron="0 1 1 * * *")
public void doScheduledWork() {
    //complete scheduled work
}

** 매우 중요

스케줄러의 발사 시간 정확성을 확인하려면 다음과 같이 영역 값을 설정해야합니다 (Istanbul에 있음).

@Scheduled(cron="0 1 1 * * *", zone="Europe/Istanbul")
public void doScheduledWork() {
    //complete scheduled work
}

여기 에서 전체 시간대 값을 찾을 수 있습니다 .

참고 : My Spring 프레임 워크 버전은 4.0.7.RELEASE입니다.


1
나는 왜 당신의 대답이 12 만 가지고 있는지 모르겠다.

2
@MoayadAbuJaber에게 대단히 감사합니다. 개발자가 내 답변으로 문제를 해결할 수 있다면 점수는 중요하지 않습니다.
Bahadir Tasdemir

xml 구성 sheduler와 함께 영역을 사용할 수 있습니까 <task:scheduled ref="paypalCronJob" method="runTask" cron="0 0 6 * * * ?"/>??
shareef

3
표준 시간대를 언급하기 위해 엄지 손가락
Forhad

2
감사합니다, @Forhad. 개발자이고 날짜 및 시간과 관련된 문제를 처리하는 경우 타임 스탬프, 시간대 및 변환에 대한 세부 정보를 알아야합니다. 그렇지 않으면 데이터가 말도 안되는 것
Bahadir Tasdemir

22

으로 메소드에 주석을 달 수 있습니다 @Scheduled(cron ="0 1 1 * * ?").

0-초

1 분

하루 중 1 시간


12

gipinani의 답변에서 누락 된 것

@Scheduled(cron = "0 1 1,13 * * ?", zone = "CST")

1.01과 13.01에 실행됩니다. 패턴없이 하루에 여러 번 작업을 실행해야 할 때 사용할 수 있습니다.

그리고 영역 속성은 원격 서버에서 배포를 수행 할 때 매우 유용합니다. 이것은 봄 4와 함께 소개되었습니다.


2
주 (시간대) 약어의 지원은 JDK 1.1.x의 호환성을위한 전체 이름을 사용하는 것을 - javadoc에 따라
slashron

6

내가 주목 한 한 가지는 : spring CronTrigger는 cron이 아닙니다. 유효한 cron 표현식 (cronmaker.com에서 유효성을 검사 할 수 있음)에 7 개의 매개 변수가 생겨서이를 받아들이지 않을 수도 있습니다. 대부분의 경우 마지막 매개 변수를 삭제하면 모든 것이 잘 작동합니다.


1
"CronTrigger는 석영이 아닙니다"
Sandy Simonton

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.