[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秒错过的,但是我并不想要,应该怎么做?
...全文
468 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);
内容概要:本文系统阐述了Java Persistence API(JPA)的核心概念、技术架构、核心组件及实践应用,重点介绍了JPA作为Java官方定义的对象关系映射(ORM)规范,如何通过实体类、EntityManager、JPQL和persistence.xml配置文件实现Java对象与数据库表之间的映射与操作。文章详细说明了JPA解决的传统JDBC开发痛点,如代码冗余、对象映射繁琐、跨数据库兼容性差等问题,并解析了JPA与Hibernate、EclipseLink等实现框架的关系。同时提供了基于Hibernate和MySQL的完整实践案例,涵盖Maven依赖配置、实体类定义、CRUD操作实现等关键步骤,并列举了常用JPA注解及其用途。最后总结了JPA的标准化优势、开发效率提升能力及在Spring生态中的延伸应用。 适合人群:具备一定Java基础,熟悉基本数据库操作,工作1-3年的后端开发人员或正在学习ORM技术的中级开发者。 使用场景及目标:①理解JPA作为ORM规范的核心原理与组件协作机制;②掌握基于JPA+Hibernate进行数据库操作的开发流程;③为技术选型、团队培训或向Spring Data JPA过渡提供理论与实践基础。 阅读建议:此资源以理论结合实践的方式讲解JPA,建议读者在学习过程中同步搭建环境,动手实现文中示例代码,重点关注EntityManager的使用、JPQL语法特点以及注解配置规则,从而深入理解JPA的设计思想与工程价值。

67,542

社区成员

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

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