在我的 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/