转载请出自出处:http://eksliang.iteye.com/blog/2208559
一.概述
simpleTrigger 内部实现机制是通过计算间隔时间来计算下次的执行时间,这就导致他有不适合调度的定时任务。例如我们想每天的 1:00AM 执行任务,如果使用 SimpleTrigger,间隔时间就是一天。注意这里就会有一个问题,即当有 misfired 的任务并且恢复执行时,该执行时间是随机的(取决于何时执行 misfired 的任务,例如某天的 3:00PM)。这会导致之后每天的执行时间都会变成 3:00PM,而不是我们原来期望的 1:00AM。
那应该怎么解决?
答:使用DateIntervalTrigger触发器
DateIntervalTrigger 是 Quartz 1.7 之后的版本加入的,其最适合调度类似每 N(1, 2, 3...)小时,每 N 天,每 N 周等的任务。虽然 SimpleTrigger 也能实现类似的任务,但是 DateIntervalTrigger 不会受到我们上面说到的 misfired 任务的影响。另外,DateIntervalTrigger 也不会受到 DST(Daylight Saving Time, 即中国的夏令时)调整的影响。笔者就曾经因为该原因将项目中的 SimpleTrigger 改为了 DateIntervalTrigger,因为如果使用 SimpleTrigger,本来设定的调度时间就会由于 DST 的调整而提前或延迟一个小时,而 DateIntervalTrigger 不会受此影响。
二.参考实例
简单的Job实现类:打印任务详情
package com.ickes.job; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; /** * 实现Job接口,定义运行的任务 * @author Ickes */ public class SimpleJob implements Job { public void execute(JobExecutionContext context) throws JobExecutionException { //打印任务详情 System.out.println( context.getJobDetail().getGroup() +"——"+context.getJobDetail().getName() +"——"+context.getTrigger().getName() +"——"+context.getTrigger().getGroup()); } }
DateIntervalTriggerDemo测试实例
package com.ickes.job; import org.quartz.DateIntervalTrigger; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerFactory; import org.quartz.impl.StdSchedulerFactory; /** * @author Ickes */ public class DateIntervalTriggerDemo { public static void main(String[] args) throws Exception { //第一步:创建一个JobDetail实例 JobDetail jobDetail = new JobDetail("j_job1","j_group1", SimpleJob.class); //第二步:通过DateIntervalTrigger触发器定义调度规则:每隔1秒钟调度一次 /* * 第三个参数:DateIntervalTrigger.IntervalUnit.SECOND 这是间隔单位 * 第四个参数:每多少次第三个参数单位触发一次job * 例如:下面就是每隔一秒触发一次 */ DateIntervalTrigger trigger = new DateIntervalTrigger("t_trigger1","t_group1", DateIntervalTrigger.IntervalUnit.SECOND, 1); //第三步:通过SchedulerFactory获取一个调度器实例 SchedulerFactory schedulerFactory = new StdSchedulerFactory(); Scheduler scheduler = schedulerFactory.getScheduler(); //第四步:将job跟trigger注册到scheduler中进行调度 scheduler.scheduleJob(jobDetail, trigger); //第五步:调度启动 scheduler.start(); } }
相关推荐
最近项目在用quartz去定时执行一些方法,这些时间都是动态的,而且还要去动态的去修改这些触发的时间,但是网上资料不全,这里写了个案例希望可以帮到大家,包呢得靠大家自己下载了,我这里用的包是quartz官网上下载...
NULL 博文链接:https://zhangyumeng.iteye.com/blog/286528
在本示例中,“Quartz+Spring定时触发器例子”是一个完整的项目,包含了所有必要的jar包,这意味着你可以直接运行它来学习和理解Quartz与Spring的集成。这个项目应该包含以下组件: 1. **配置文件**:可能包含一个...
在 Quartz 中,触发器是定义任务何时运行的核心组件。触发器可以根据不同的需求设置不同的类型,如SimpleTrigger、CronTrigger等。CronTrigger 使用Cron表达式来定义任务的执行周期,而这种表达式可能对一些开发者来...
这篇笔记将深入探讨如何使用Spring与Quartz结合来实现触发器的示例。 首先,Quartz是一个开源的作业调度框架,它允许开发者定义任务并在预定的时间点执行。Spring则是一个强大的应用框架,提供了依赖注入(DI)和...
这个"Quartz所有dll+触发器时间简便捷配置器"包含了Quartz.NET运行所需的若干组件,特别是`Common.Logging.Core.dll`和`Quartz.dll`这两个关键库。 `Common.Logging.Core.dll`是通用日志接口库,为各种日志实现提供...
quartz触发器表达式生成器,根据这个工具自动生成表达式,粘贴即可使用
首先,我们要了解Quartz中的核心概念:Job(任务)、Trigger(触发器)和Scheduler(调度器)。Job是实际要执行的任务,Trigger定义了何时触发Job,而Scheduler负责管理和执行这些Trigger。 在Spring中集成Quartz,...
在JBoss AS6中使用Quartz,有两种主要的方法来实现定时任务,这两种方法都是基于Quartz框架的。下面将详细解释这两种方法。 **1. 第一种方法:定义MDB-Consumer(Message-Driven Bean)** 这种方法是首选的方式,...
在"Quartz Spring整合——附带webservice Demo"的项目中,我们可以看到如何将这两个强大的工具结合在一起。这个Demo可能包含了一个使用Quartz调度器来触发Web服务调用的示例。Web服务(Webservice)是一种基于标准的...
此外,Quartz还支持Cron表达式和SimpleTrigger等不同类型的触发器,以满足各种复杂的定时需求。 `quartz-all-1.6.0.jar`则是一个包含所有依赖项的完整版本,它除了包含`quartz-1.6.0.jar`中的核心组件外,还集成了...
以下是对如何在 Spring 中添加触发器并结合 Quartz 实现定时功能的详细解释: 1. **Quartz 概述** - Quartz 是 Java 平台上用于创建、调度和执行计划任务的开源库。它提供了丰富的 API 和调度功能,支持简单任务到...
Quartz支持多种触发器类型,如简单触发器、cron触发器和NTP触发器,可以满足各种时间安排需求。 2. **Spring与Quartz的集成** Spring框架提供了一种便捷的方式将Quartz集成到应用程序中,通过Spring的JobDetail和...
在Quartz 2.2.3版本中,初始化数据库是使用Quartz的关键步骤,因为Quartz依赖于一个持久化存储来保存作业和触发器的信息。这个过程通常涉及执行一系列SQL语句来创建必要的表结构。 Quartz的初始化SQL语句主要用于...
版本1.8.6是Quartz的一个稳定版本,它包含了对数据库存储作业和触发器的支持。 在Quartz中,为了将任务和触发器的调度信息存储到数据库中,需要预先创建相应的数据库表。"dbTables" 文件正是为此目的提供的。这个...
此外,Quartz支持多种触发器类型,如SimpleTrigger(简单触发器)、CronTrigger(CRON表达式触发器)等,可以根据不同的时间规则定义任务执行。 总的来说,"quartz-2.2.3-sql.zip"文件为开发者提供了在各种常见...
QuartzDemo是一个针对iOS平台的源码示例项目,它主要展示了如何使用Quartz 2D图形编程接口来创建自定义的视觉效果和图形。Quartz 2D是Apple为iOS和Mac OS X提供的一种核心图形库,允许开发者在应用程序中绘制2D图形...
Quartz支持多种触发器类型,如简单触发器、cron触发器等,以满足不同类型的定时需求。 在`QuartzProjectGovQuery`这个项目中,很可能是演示了如何创建一个查询政府数据的作业,并使用多线程处理查询结果。可能的...