在我的石英调度程序中,当每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);
这是主类方法
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("Trigger Starts..");
}
我的实际输出是
触发器1 - 当cron第一次触发时,它将执行3或4次
触发器启动..
触发器启动..
触发器启动..
触发器2 - 当cron第二次触发时,它将执行6或7次
触发器启动..
触发器启动..
触发器启动..
触发器启动..
触发器启动..
触发器启动..
触发器启动..
触发器启动..
调用此Main类的6或7次。我想限制这种情况
我的预期输出是
触发器启动..
触发器启动..
应该执行一次
答案 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);