0

次の cron 式を使用して、毎週金曜日の指定された時刻 (以下のサンプルでは午後 1 時 13 分) にジョブを実行しています。

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
4

1 に答える 1

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 を削除すると、印刷メッセージがトリガーされません。そこに印刷メッセージがトリガーされます。

于 2012-04-04T09:20:25.050 に答える