2012-04-04 2 views
0

다음의 cron 표현식을 사용하여 매주 금요일 특정 시간 (예 : 오후 1:13 PM)에 작업을 실행하고 있습니다. 그때가 다음 주 금요일까지 실행을 시작하지 말아야 금요일이 트리거를 한 후 다른 일을 초기화 할 경우Quartz CronTrigger가 잘못된 날짜/시간에 작업을 실행 중

0 13 13 ? * FRI 

그래서 예상되는 동작이되어야한다. 내 사건에서 무슨 일이 일어나는지는 오늘 (오늘 수요일 인 것처럼) 내가 오늘이 방아쇠를 초기화하더라도 바로 그 순간에 일자리를 내기 시작합니다.

관련 자바 소스 :

CronTrigger cronTrigger = new CronTrigger("trigger_" + groupName, groupName, cronExpression); 
cronTrigger.setStartTime(startDate); //startDate = 1-Mar-2012 
cronTrigger.setEndTime(endDate);  //endDate = 30-Apr-2012 
+0

* '0 13 13? * FRI' *? –

+0

오오 그렇습니다. 실제로 잘못된 파일에서 복사했습니다. – Waqas

답변

3

문제가 startTime을을 구성하는 것입니다. startTime은 트리거가 발생해야하는 시점을 의미합니다. 날짜가 오래 되었기 때문에 이것은 스케줄러에서 실화를 야기하며 디폴트 동작은 스케줄러가 즉시 리파인하는 것입니다.

setStartTime을 제거하면 기본 동작은 startTime이 현재 시간으로 설정되고 첫 번째 트리거 시간이이 목요일의 시작 시간 이후에 cron 트리거와 일치합니다. 을 통해 함께 내가 확인

빠른 작은 시험 :

public class Test { 
    public static void main(String[] args) throws ParseException, SchedulerException { 
     String groupName = "group"; 
     String cronExpression = "0 13 13 ? * THUR"; 

     CronTrigger cronTrigger = new CronTrigger("trigger_" + groupName, groupName, cronExpression); 
     cronTrigger.setStartTime(new Date(0)); 
     Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); 
     JobDetail detail = new JobDetail("testJob", groupName, TestJob.class); 
     scheduler.scheduleJob(detail, cronTrigger); 
     scheduler.start(); 
     try { 
      Thread.sleep(50001); 
     } catch (Exception ignore) { 
     } 

    } 

    public static class TestJob implements Job { 
     public void execute(JobExecutionContext context) throws JobExecutionException { 
      System.out.println("TEST"); 
     } 
    } 
} 

내 인쇄 메시지가 실행되지 않는 setStartTime을 제거. 거기에서 인쇄 메시지가 나타납니다.

+2

cron 표현식으로 확인하려면'CronTrigger.getNextFireTime()'명령으로 다음 화재 시간을 테스트 할 수 있습니다. – nobeh