簡體   English   中英

Quartz CronTrigger 在錯誤的日期/時間執行作業

[英]Quartz CronTrigger executing jobs on wrong date/time

我使用以下 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

您的問題是配置 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 時,我的打印消息不會觸發。 有了它,打印消息就會觸發。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM