2012-04-04 10 views
0

私は次のcron式を使用して、毎週金曜日に指定された時刻にそのジョブを実行しています(下のサンプルは1:13 PMです)。クォーツCronTriggerが間違った日付/時刻にジョブを実行しています

0 13 13 ? * FRI 

ので、予想される動作は、私は、他の任意の日金曜日このトリガーを初期化した場合、それは次金曜日まで実行を開始してはならないはずです。しかし、私の場合に起こっていることは、今日(今日の水曜日のように)このトリガを初期化しても、まもなくジョブの実行を開始します。

関連するJavaソース:

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

関連する問題