년 값이 포함 된 CronTrigger를 사용하여 Quartz에서 작업을 예약하는 이상한 동작을 관찰하고 있습니다. 대한 크론 식을 계산cronTrigger를 연도 값이 포함 된 식으로 사용할 때 오류가 발생했습니다.
CronTrigger trigger = cronJobTriggerFactory.getObject();
trigger.setName(triggerName);
trigger.setGroup(triggerGroupName);
trigger.setCronExpression(cronSchedule);
trigger.setVolatility(false);
JobDetail job = schedulableJobFactory.getObject();
job.setName(jobName);
job.setGroup(jobGroupName);
job.setVolatility(false);
job.setDurability(true);
Date scheduleTime1 = scheduler.scheduleJob(job, trigger);
logger.info(job.getKey() + " will run at: " + scheduleTime1);
다음 내 단위 테스트에서 나는 "지금"날짜를 결정하고, 그것을 5 분 추가 : 여기
내가 트리거를 생성하고 그와 함께 작업을 예약하고 어떻게 이 날짜/시간 및 주 수업 시간에 전화하면이 일정으로 일할 수 있습니다.
org.quartz.SchedulerException: Based on configured schedule, the given trigger will never fire.
: 나는 다음과 같은 오류를 받고 있어요 -이 크론 식으로 작업을 예약 할 때
NotificationSchedulerTest - Today is: 9 May 2012 05:32 PM
NotificationSchedulerTest - 5 min later is: 9 May 2012 05:37 PM
NotificationSchedulerTest - cron schedule is: 0 37 17 * 4 ? 2012
그러나, 다음은 크론 표현이 전달됩니다 보여줍니다 단위 테스트의 넣어 밖으로이다
보시다시피 테스트를 실행하는 날짜/시간에 상대적인 미래의 날짜입니다. 따라서 과거 한 번에 작업이 실행되도록 예약하는 데는 문제가 없습니다.
다음으로 이상한 점은 : "0 37 17 * 4? "으로 연도 값을 지정했는지 확인하십시오.
cron 표현식 생성을 수정하고 연도 필드를 지정하지 않은 상태로두면 (선택 사항이므로) : "0 37 17 * 4?" 그런 다음 스케줄링이 성공하지만 스케줄러는 다음에 작업 할 때 2013 년임을 보여줍니다! (1 년 후 ... - 물론 나는 ...이 발사되어 있는지 확인하는 것이 그렇게 오래 기다릴 수 없어) :
NotificationSchedulerTest - Today is: 9 May 2012 06:11 PM
NotificationSchedulerTest - 5 min later is: 9 May 2012 06:16 PM
NotificationSchedulerTest - cron schedule is: 0 16 18 * 4 ?
...
NotificationScheduler - myJobKey will run at: Mon Apr 01 18:16:00 EDT 2013
나는이 크론 표현식에서 뭔가를 놓치고 있습니까?
감사합니다! 나는 그것이 어리 석다는 것을 알았다 ... 혼란은 내가 자바 캘린더 인스턴스에서 직접 cron 스케쥴을 생성하는 방식에서왔다. 'code'Calendar cal1 = Calendar.getInstance(); ... cronString.add (""+ String.valueOf (cal1.get (Calendar.MONTH)); 'code'그리고 Calendar에서 0부터 시작합니다! 이제 Quartz에 1을 더해야합니다. , 토마스! :) – Marina
나는 똑같은 실수를 저질 렀다. 이 답변 덕분에 빨리 찾을 수있었습니다. – Nik