在石英调度程序

时间:2017-07-18 09:59:42

标签: java quartz-scheduler crontrigger

在我的石英调度程序中,当每20秒触发一次cron触发器时,我的Main类执行5或6次。我想限制只在每20秒触发一次cron触发器时执行一次Main类

这是我的CronTrigger

SchedulerFactory sf = new StdSchedulerFactory();
Scheduler scheduler = sf.getScheduler();
JobDetail job = JobBuilder.newJob(Main.class).build();
Date startTime = DateBuilder.nextGivenSecondDate(null, 10);
// run every 20 seconds infinite loop
CronTrigger crontrigger = TriggerBuilder.newTrigger().startAt(startTime).withSchedule(CronScheduleBuilder.cronSchedule("0/20 * * * * ?")).build();
scheduler.start();
scheduler.scheduleJob(job, crontrigger);

这是主类方法

Main.java

public void execute(JobExecutionContext context) throws JobExecutionException {
    System.out.println("Trigger Starts.."); 
}

我的实际输出是

触发器1 - 当cron第一次触发时,它将执行3或4次

触发器启动..

触发器启动..

触发器启动..

触发器2 - 当cron第二次触发时,它将执行6或7次

触发器启动..

触发器启动..

触发器启动..

触发器启动..

触发器启动..

触发器启动..

触发器启动..

触发器启动..

调用此Main类的6或7次。我想限制这种情况

我的预期输出是

触发1(前20秒)

触发器启动..

触发器2(接下来的20秒)

触发器启动..

应该执行一次

1 个答案:

答案 0 :(得分:0)

在我的系统上,我对它进行了测试,它的工作原理非常好。您能否请使用以下模板,请分享它的输出和有关记录器的一些信息(如果使用的话)。

作业:

public void execute(JobExecutionContext context) throws JobExecutionException
{
    int count;
    if(context.get("count") == null)
        context.put("count", count = 1);
    else
        context.put("count", count = (Integer) context.get("count") + 1);
    System.out.println("Hello Quartz!, Count: " + count);
}

这是我的CronTrigger:

SchedulerFactory sf = new StdSchedulerFactory();
    Scheduler scheduler = sf.getScheduler();
    JobDetail job = JobBuilder.newJob(HelloJob.class).build();
    // run every 20 seconds infinite loop
    CronTrigger crontrigger = TriggerBuilder.newTrigger().withSchedule(
            CronScheduleBuilder.cronSchedule("0/20 * * * * ?")).build();
    scheduler.start();
    scheduler.scheduleJob(job, crontrigger);