[quartz] Scheduler启动一段时间后添加新任务,新任务会被立即执行多次

gdrocky1989 2015-12-28 02:30:50
一个Scheduler,调用start()后一段时间,再添加新任务A,新任务A在添加时就会被执行多次,用来弥补该Scheduler开始后到新任务A添加这段时间内本应该执行的那些任务,但是我并不想让这段时间的任务被执行,怎么破??
贴一下代码
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
JobDetail job = newJob(InvokeStatJob.class) //print "hello -- "+ new Date()
.withIdentity("job1", "group1")
.build();
CronTrigger trigger = newTrigger()
.withIdentity("trigger1", "group1")
.withSchedule(cronSchedule("0/2 * * * * ?"))
.build();
JobDetail job2 = newJob(InvokeStatJob2.class) //print "world! --- "+new Date()
.withIdentity("job2", "group2")
.build();
CronTrigger trigger2 = newTrigger()
.withIdentity("trigger2", "group2")
.withSchedule(cronSchedule("0/3 * * * * ?"))
.build();
sched.scheduleJob(job, trigger);
sched.start();
Thread.sleep(10L * 1000L);
System.out.println("=========================");
sched.scheduleJob(job2,trigger2);
Thread.sleep(30L*1000L);
sched.shutdown(true);


执行结果:
hello -- Mon Dec 28 10:33:18 CST 2015
hello -- Mon Dec 28 10:33:20 CST 2015
hello -- Mon Dec 28 10:33:22 CST 2015
hello -- Mon Dec 28 10:33:24 CST 2015
hello -- Mon Dec 28 10:33:26 CST 2015
hello -- Mon Dec 28 10:33:28 CST 2015
=========================
world! --- Mon Dec 28 10:33:28 CST 2015
world! --- Mon Dec 28 10:33:28 CST 2015
world! --- Mon Dec 28 10:33:28 CST 2015
world! --- Mon Dec 28 10:33:28 CST 2015
hello -- Mon Dec 28 10:33:30 CST 2015
world! --- Mon Dec 28 10:33:30 CST 2015
hello -- Mon Dec 28 10:33:32 CST 2015
world! --- Mon Dec 28 10:33:33 CST 2015
hello -- Mon Dec 28 10:33:34 CST 2015
hello -- Mon Dec 28 10:33:36 CST 2015
world! --- Mon Dec 28 10:33:36 CST 2015


在"========================="后面的前四个“world! --- Mon Dec 28 10:33:28 CST 2015”是为了弥补前10秒错过的,但是我并不想要,应该怎么做?
...全文
431 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
gdrocky1989 2015-12-28
  • 打赏
  • 举报
回复
问题找到了,triger在定义时有一个默认的参数startTime,如果不设置的话会默认设置为now 所以,上面的代码应该改为:
SchedulerFactory sf = new StdSchedulerFactory();
        Scheduler sched = sf.getScheduler();
        JobDetail job = newJob(InvokeStatJob.class)             //print "hello -- "+ new Date()
                .withIdentity("job1", "group1")
                .build();
        CronTrigger trigger = newTrigger()
                .withIdentity("trigger1", "group1")
                .startNow()
                .withSchedule(cronSchedule("0/2 * * * * ?"))
                .build();
        sched.scheduleJob(job, trigger);
        sched.start();
        Thread.sleep(10L * 1000L);
        System.out.println("=========================");
        JobDetail job2 = newJob(InvokeStatJob2.class)           //print "world! --- "+new Date()
                .withIdentity("job2", "group2")
                .build();
        CronTrigger trigger2 = newTrigger()
                .withIdentity("trigger2", "group2")
                .startNow()
                .withSchedule(cronSchedule("0/3 * * * * ?"))
                .build();
        sched.scheduleJob(job2, trigger2);
        Thread.sleep(30L*1000L);
        sched.shutdown(true);

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧