java - 如何限制 cron 触发器在 quartz 调度程序中触发时仅执行一次作业

标签 java quartz-scheduler crontrigger

在我的 quartz 调度程序中,当 cron 触发器每 20 秒触发时,我的 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 秒)

触发器开始..

应该执行一次

最佳答案

在我的系统上,我测试了它,它工作得很好。您能否使用以下模板并分享它的输出以及有关记录器(如果使用)的一些信息。

工作:

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);

关于java - 如何限制 cron 触发器在 quartz 调度程序中触发时仅执行一次作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45163436/

相关文章:

linux - Linux 机器中 crontab 的服务名称是什么?

java - catch(Exception e) 后跟 if (e instanceof Exception)

java - 对于经验丰富的程序员来说,最好的 Java RPG(角色扮演游戏)引擎是什么?

java - 每 n 周 Quartz 事件,在不同的几天

spring - Quartz 不支持@autowired

cpanel 中的 Laravel + Cronjob 无法正常工作

php - 在 cron 作业中使用 usr/bin/php p 传递参数

java - 如何报告 JVM 中的所有异常,无论是自己的代码还是第三方代码?

java - TestNG 中的优先事项

java - Quartzscheduler 在每月的第一个和第三个星期一运行