`
eksliang
  • 浏览: 598244 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Quartz——DateIntervalTrigger触发器

阅读更多

转载请出自出处: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();
	}
}

 

 

1
2
分享到:
评论

相关推荐

    quartz动态创建触发器,动态修改触发器时间

    最近项目在用quartz去定时执行一些方法,这些时间都是动态的,而且还要去动态的去修改这些触发的时间,但是网上资料不全,这里写了个案例希望可以帮到大家,包呢得靠大家自己下载了,我这里用的包是quartz官网上下载...

    Quartz——作业调度框架

    NULL 博文链接:https://zhangyumeng.iteye.com/blog/286528

    Quartz+Spring定时触发器例子

    在本示例中,“Quartz+Spring定时触发器例子”是一个完整的项目,包含了所有必要的jar包,这意味着你可以直接运行它来学习和理解Quartz与Spring的集成。这个项目应该包含以下组件: 1. **配置文件**:可能包含一个...

    quartz 触发器表达式生成器

    在 Quartz 中,触发器是定义任务何时运行的核心组件。触发器可以根据不同的需求设置不同的类型,如SimpleTrigger、CronTrigger等。CronTrigger 使用Cron表达式来定义任务的执行周期,而这种表达式可能对一些开发者来...

    spring quartz实现触发器demo(笔记)

    这篇笔记将深入探讨如何使用Spring与Quartz结合来实现触发器的示例。 首先,Quartz是一个开源的作业调度框架,它允许开发者定义任务并在预定的时间点执行。Spring则是一个强大的应用框架,提供了依赖注入(DI)和...

    Quartz所有dll+触发器时间简便捷配置器

    这个"Quartz所有dll+触发器时间简便捷配置器"包含了Quartz.NET运行所需的若干组件,特别是`Common.Logging.Core.dll`和`Quartz.dll`这两个关键库。 `Common.Logging.Core.dll`是通用日志接口库,为各种日志实现提供...

    quartz触发器表达式生成器

    quartz触发器表达式生成器,根据这个工具自动生成表达式,粘贴即可使用

    Quartz触发器的使用DEMO(Spring实现)

    首先,我们要了解Quartz中的核心概念:Job(任务)、Trigger(触发器)和Scheduler(调度器)。Job是实际要执行的任务,Trigger定义了何时触发Job,而Scheduler负责管理和执行这些Trigger。 在Spring中集成Quartz,...

    jboss6下使用quartz两种方法

    在JBoss AS6中使用Quartz,有两种主要的方法来实现定时任务,这两种方法都是基于Quartz框架的。下面将详细解释这两种方法。 **1. 第一种方法:定义MDB-Consumer(Message-Driven Bean)** 这种方法是首选的方式,...

    Quartz Spring整合——附带webservice Demo

    在"Quartz Spring整合——附带webservice Demo"的项目中,我们可以看到如何将这两个强大的工具结合在一起。这个Demo可能包含了一个使用Quartz调度器来触发Web服务调用的示例。Web服务(Webservice)是一种基于标准的...

    quartz-1.6.0.jar和quartz-all-1.6.0.jar

    此外,Quartz还支持Cron表达式和SimpleTrigger等不同类型的触发器,以满足各种复杂的定时需求。 `quartz-all-1.6.0.jar`则是一个包含所有依赖项的完整版本,它除了包含`quartz-1.6.0.jar`中的核心组件外,还集成了...

    spring添加触发器+quartz

    以下是对如何在 Spring 中添加触发器并结合 Quartz 实现定时功能的详细解释: 1. **Quartz 概述** - Quartz 是 Java 平台上用于创建、调度和执行计划任务的开源库。它提供了丰富的 API 和调度功能,支持简单任务到...

    quartz-all.zip

    Quartz支持多种触发器类型,如简单触发器、cron触发器和NTP触发器,可以满足各种时间安排需求。 2. **Spring与Quartz的集成** Spring框架提供了一种便捷的方式将Quartz集成到应用程序中,通过Spring的JobDetail和...

    quartz-2.2.3版本的quartz初始化sql语句

    在Quartz 2.2.3版本中,初始化数据库是使用Quartz的关键步骤,因为Quartz依赖于一个持久化存储来保存作业和触发器的信息。这个过程通常涉及执行一系列SQL语句来创建必要的表结构。 Quartz的初始化SQL语句主要用于...

    quartz quartz-1.8.6 dbTables 建表sql

    版本1.8.6是Quartz的一个稳定版本,它包含了对数据库存储作业和触发器的支持。 在Quartz中,为了将任务和触发器的调度信息存储到数据库中,需要预先创建相应的数据库表。"dbTables" 文件正是为此目的提供的。这个...

    quartz-2.2.3-sql.zip

    此外,Quartz支持多种触发器类型,如SimpleTrigger(简单触发器)、CronTrigger(CRON表达式触发器)等,可以根据不同的时间规则定义任务执行。 总的来说,"quartz-2.2.3-sql.zip"文件为开发者提供了在各种常见...

    IOS应用源码——QuartzDemo.rar

    QuartzDemo是一个针对iOS平台的源码示例项目,它主要展示了如何使用Quartz 2D图形编程接口来创建自定义的视觉效果和图形。Quartz 2D是Apple为iOS和Mac OS X提供的一种核心图形库,允许开发者在应用程序中绘制2D图形...

    Quartz多线程示例.rar

    Quartz支持多种触发器类型,如简单触发器、cron触发器等,以满足不同类型的定时需求。 在`QuartzProjectGovQuery`这个项目中,很可能是演示了如何创建一个查询政府数据的作业,并使用多线程处理查询结果。可能的...

Global site tag (gtag.js) - Google Analytics