首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Quartz CronTrigger在错误的日期/时间执行作业

Quartz CronTrigger在错误的日期/时间执行作业
EN

Stack Overflow用户
提问于 2012-04-04 16:45:40
回答 1查看 3.1K关注 0票数 0

我使用下面的cron表达式在每周五的指定时间执行一个作业(在下面的示例中是下午1:13 )。

代码语言:javascript
复制
0 13 13 ? * FRI

所以预期的行为应该是,如果我在星期五以外的任何一天初始化这个触发器,那么它应该在下周五之前不会开始执行。但在我的例子中发生的情况是,即使我今天初始化了这个触发器(因为今天是星期三),它也会在特定的时刻开始执行作业。

相关java源码:

代码语言:javascript
复制
CronTrigger cronTrigger = new CronTrigger("trigger_" + groupName, groupName, cronExpression);
cronTrigger.setStartTime(startDate); //startDate = 1-Mar-2012
cronTrigger.setEndTime(endDate);     //endDate   = 30-Apr-2012
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-04 17:20:25

您的问题是配置startTime。startTime是触发器应该发生的时间。由于日期是旧的,这会导致调度程序中的失火,默认行为是调度器立即重新触发。

删除setStartTime,默认行为是将startTime设置为当前时间,而第一个触发时间将是在本周四开始时间之后与cron触发器匹配的时间。

快速的小测试我一起来验证:

代码语言:javascript
复制
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时,我的打印消息不会触发。有了它,打印消息就会触发。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10007730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档