2012-10-18 3 views
0

나는 매주 월요일에 실행해야하는 Java로 작성된 보고서 작성 프로그램을 가지고 있으며 내 스케줄링 부분에 Quartz를 사용했습니다. 트릭은 생성해야하는 보고서의 양이 다양하다는 것입니다. 월요일이 그 달의 첫 번째 날인지 아니면 그 다음 달인지에 따라 다릅니다.자바 석영 - cron 표현

이 작업을 수행하기 위해 수행 한 작업은 월요일마다 특정 작업 클래스를 가리키는 동안 매월 월요일마다 트리거를 작성하고 나머지 월요일은 다른 작업 클래스를 가리 킵니다.

 .withIdentity("trigger1", "group1") 
     .withSchedule(cronSchedule("0 1 0 ? 1/1 MON#1 *")) 
     .build(); 

     .withIdentity("trigger2", "group1") 
     .withSchedule(cronSchedule("0 1 0 ? 1/1 MON#2 *")) 
     .build(); 

등 내가 도달 할 때까지 한 달에 5 월요일이있을 수 있기 때문에 그것은 MON # 5에 도달

 .withIdentity("trigger5", "group1") 
     .withSchedule(cronSchedule("0 1 0 ? 1/1 MON#5 *")) 
     .build(); 

; 이 10 월처럼. 이것은 괜찮아요. (제 생각에는) 작동하지만, 제 질문은 이것입니다. 내 cron 일정을 결합하여 앞으로의 월요일에만 하나의 방아쇠가 필요할 것인가? 뭔가가 좋아.

 .withSchedule(cronSchedule("0 1 0 ? 1/1 MON#2,MON#3,MON#4,MON#5 *")) 

있다면, 제게 친절히 알려주십시오. 만약 내가 뭔가를 잃어 버리거나, 프로그래밍에 뭔가가 있거나, 진리로 인도하는 웹 인 미궁에 알려지지 않은 페이지가 존재한다면, 나는 친절하게도 올바른 방향으로 나를 가리킨다.

귀하의 친절한 말씀은 대단히 감사하겠습니다. 감사합니다.

p.s : UNIX 컴퓨터 용이라고해도 cron 태그가 포함되어 있습니다. 나는 쿼츠 cron과 유닉스 cron 사이에 거의 비슷하게 차이가 있다고 믿는다. 있다면 그때 말 해주세요.

답변

1

공식적인 해결책이없는 것처럼 보입니다.

'#'문자가 요일 필드에 허용 : 여기

는 석영 2.0 documentation에서 인용 한 것입니다. 이 문자는 해당 달의 "n 번째"XXX 요일을 지정하는 데 사용됩니다. 예를 들어 요일 필드의 "6 # 3"값은 해당 월의 세 번째 금요일 (6 일 = 금요일, "3 월"= 3 번째 월)을 의미합니다. 다른 예 : "2 # 1"= 매월 첫째 월요일과 "4 # 5"= 매월 다섯 번째 수요일. "# 5"를 지정하고 그 달에 주어진 요일 중 5 개가없는 경우 그 달에 아무 발사도 일어나지 않습니다. '#'문자가 사용 된 경우 요일 필드에 표현식이 하나만있을 수 있습니다 (두 개의 표현식이 있으므로 "3 # 1,6 # 3"은 유효하지 않습니다).

개인적으로 this.

+0

계몽주의에 감사드립니다. 나는 내가 가진 것과 함께해야 할 것 같아. – ides

1

월의 첫 번째 X-날 크론 실행 무언가를 필요로 보통 유닉스 해결 방법은 크론 트리거를 양식에서 스크립트 것입니다 : 폼의 crontab 항목에

#! /usr/bin/bash 
day=$(date +%d) 
if ((day <= 7)) ; then 
    exec firstdayofthemonthshellscript.sh 
fi 

0 0 * * 1 wrapperscript.sh 

(예 : 월요일).

요약하면, Quartz cron을 사용하여 목표를 쉽게 달성 할 수 있다고 생각하지 않지만, 구현에서 위의 트릭을 사용할 수 있습니다.

건배,

1

에 오픈 버그도있다, 나는 자바 대신 석영 구성에서 논리의이 종류를 넣어 것입니다. Quartz가 항상 자바 작업 디스패처를 실행하도록 만든 다음 날짜에 따라 실행할 보고서를 결정합니다.