`

quartz定时器工具

    博客分类:
  • Java
 
阅读更多
http://my.oschina.net/u/1261308/blog/386632


一次工作的时候有用到。正好把之前做的一些记录也贴出了做个总结好了。

1.quartz核心接口
Scheduler 调度器、Job、JobDetail、Trigger、JobDataMap

2.Scheduler
1.这个 Scheduler 的实现,实际上是一个代理,对其中方法调用会传递到 QuartzScheduler 实例上
2.SchedulerFactory实例化
3.org.quartz.impl.DirectoSchedulerFactory 
  org.quartz.impl.StdSchedulerFactory
StdSchedulerFactory会加载类路径下的quartz.properties 文件
4.一旦scheduler被关闭(shutdown),则它不能再重新启动,除非重新实例化它


3.job
1.public interface Job { void execute(JobExecutionContext context) throws JobExecutionException; }
2.StatefulJob在任务的每次执行之后重新存储JobDataMap

4.JobDetail
1.JobDetail对象由Quartz客户端在Job被加入到scheduler时创建。它包含了Job的各种设置属性以及一个JobDataMap对象,这个对象被用来存储给定Job类实例的状态信息。

2.每次scheduler执行这个任务时,它就创建这个类的新实例,然后调用该实例的execute(..)方法。

3.JobDataMap
JobDetail.getJobDataMap().put("jobSays", "Hello World!");
JobExecutionContext.getJobDetail().getJobDataMap();
Trigger.getJobDataMap();
JobExecutionContext.getMergedJobDataMap();

5.Trigger
1.Trigger对象被用来触发jobs的执行。

2.常用的Trigger类是SimpleTrigger和CronTrigger。

3.SimpleTrigger
SimpleTrigger用来触发只需执行一次或者在给定时间触发并且重复N次且每次执行延迟一定时间的任务。

4.CronTriggers
像日历那样按日程来触发任务

5.TriggerUtils
提供了许多便捷的方法简化了构造和配置 trigger
public static Trigger makeSecondlyTrigger(int intervalInSeconds);
public static Trigger makeDailyTrigger(int hour, int minute);
public static Trigger makeWeeklyTrigger(int dayOfWeek, int hour, int minute);
public static Trigger makeMonthlyTrigger(int dayOfMonth, int hour, int minute);
public static Date getNextGivenMinuteDate(Date date, int minuteBase);
public static Date getEvenMinuteDate(Date date);

6.Listeners
1.TriggerListeners和JobListeners
监听器是在scheduler事件发生时能够执行动作的对象。
TriggerListeners接收与triggers相关的事件
JobListeners则接收与Job相关的事件。

2.注册
监听器然后在执行的时候注册到scheduler
听器可以被注册为“全局”的或者“非全局”

全局:scheduler.addGlobalJobListener(jobListener);  

非全局scheduler.addJobListener(jobListener);   
jobDetail.addJobListener(jobListener.getName()); 

3.SchedulerListeners
只接收与特定trigger 或job无关的Scheduler自身事件通知

4.jobListener的方法:
jobToBeExecuted() 方法

Scheduler 在 JobDetail 将要被执行时调用这个方法。

·jobExecutionVetoed() 方法

Scheduler 在 JobDetail 即将被执行,但又被 TriggerListener 否决了时调用这个方法。

·jobWasExecuted() 方法

Scheduler 在 JobDetail 被执行之后调用这个方法。

5.TriggerListener
·getName() 方法

和前面的 JobListener 一样,TriggerListner 接口的 getName() 返回一个字符串用以说明监听器的名称。对于非全局的 TriggerListener,在 addTriggerListener() 方法中给定的名称必须与监听器的 getName() 方法返回值相匹配。

·triggerFired() 方法

当与监听器相关联的 Trigger 被触发,Job 上的 execute() 方法将要被执行时,Scheduler 就调用这个方法。在全局 TriggerListener 情况下,这个方法为所有 Trigger 被调用。

·vetoJobExecution() 方法

在 Trigger 触发后,Job 将要被执行时由 Scheduler 调用这个方法。TriggerListener 给了一个选择去否决 Job 的执行。假如这个方法返回 true,这个 Job 将不会为此次 Trigger 触发而得到执行。

·triggerMisfired() 方法

Scheduler 调用这个方法是在 Trigger 错过触发时。如这个方法的 JavaDoc 所指出的,你应该关注此方法中持续时间长的逻辑:在出现许多错过触发的 Trigger 时,长逻辑会导致骨牌效应。你应当保持这上方法尽量的小。

·triggerComplete() 方法

Trigger 被触发并且完成了 Job 的执行时,Scheduler 调用这个方法。这不是说这个 Trigger 将不再触发了,而仅仅是当前 Trigger 的触发(并且紧接着的 Job 执行) 结束时。这个 Trigger 也许还要在将来触发多次的。

7.SchedulerPlugin插件
1.Quartz提供了一个接口(org.quartz.spi.SchedulerPlugin)来插入附加的功能。

2.public interface SchedulerPlugin {
public void initialize(String name, Scheduler scheduler) throws SchedulerException;
public void start();
public void shutdown();
}

8.Quartz cron
1.
表 5.1. Quartz Cron 表达式支持到七个域
名称 是否必须 允许值 特殊字符
秒 是 0-59 , - * /
分 是 0-59 , - * /
时 是 0-23 , - * /
日 是 1-31 , - * ? / L W C
月 是 1-12 或 JAN-DEC , - * /
周 是 1-7 或 SUN-SAT , - * ? / L C #
年 否 空 或 1970-2099 , - * /
2.* 星号

使用星号(*) 指示着你想在这个域上包含所有合法的值。例如,在月份域上使用星号意味着每个月都会触发这个 trigger。

3.? 问号

? 号只能用在日和周域上,但是不能在这两个域上同时使用。你可以认为 ? 字符是 "我并不关心在该域上是什么值。" 这不同于星号,星号是指示着该域上的每一个值。? 是说不为该域指定值。

4., 逗号

逗号 (,) 是用来在给某个域上指定一个值列表的。例如,使用值 0,15,30,45 在秒域上意味着每15秒触发一个 trigger。

5./ 斜杠

斜杠 (/) 是用于时间表的递增的。我们刚刚用了逗号来表示每15分钟的递增,但是我们也能写成这样 0/15。

6.- 中划线

中划线 (-) 用于指定一个范围。例如,在小时域上的 3-8 意味着 "3,4,5,6,7 和 8 点。"  域的值不允许回卷,所以像 50-10 这样的值是不允许的。

7.L 说明了某域上允许的最后一个值。它仅被日和周域支持。当用在日域上,表示的是在月域上指定的月份的最后一天。例如,当月域上指定了 JAN 时,在日域上的 L 会促使 trigger 在1月31号被触发。

8.W 字母

W 字符代表着平日 (Mon-Fri),并且仅能用于日域中。它用来指定离指定日的最近的一个平日

9.# 井号

# 字符仅能用于周域中。它用于指定月份中的第几周的哪一天。例如,如果你指定周域的值为 6#3,它意思是某月的第三个周五 (6=星期五,#3意味着月份中的第三周)。
分享到:
评论

相关推荐

    Quartz定时器介绍与简单使用

    ### Quartz定时器介绍与简单使用 #### 1.1 Quartz介绍 Quartz 是一款功能强大的开源任务调度框架,它完全采用 Java 编写而成。该框架允许开发人员以灵活的方式定义作业及其触发规则,从而实现对任务的定时调度。...

    Quartz定时器从入门到进阶

    Quartz定时器是一个开源的作业调度框架,专为J2SE和J2EE应用程序设计,完全用Java编写。它的核心优势在于提供强大的灵活性和简单性,使得开发者可以轻松创建简单的或复杂的任务调度。Quartz支持多种特性,如数据库...

    Quartz定时器,表达式自动生成工具

    总的来说,"Quartz定时器,表达式自动生成工具"是Quartz定时器的有益补充,它降低了学习和使用Quartz的门槛,使得开发者可以更专注于业务逻辑,而不是繁琐的定时表达式设置。通过下载提供的"Quartz定时表达式自动...

    java Spring OpenSymphony的Quartz定时器的时间设置

    通过本文的介绍,相信读者已经对Quartz定时器的配置和时间设置有了更深入的理解,能够更好地在实际项目中应用这一强大的工具。无论是在日常运维、数据处理还是自动化测试等场景下,Quartz定时器都能提供稳定可靠的...

    [Quartz]Quartz定时器的j2ee系统使用

    Quartz的Hibernate模型 博文链接:https://xmkevinchen.iteye.com/blog/196392

    Quartz定时器事例

    总之,Quartz定时器是Java开发中不可或缺的工具,它提供了丰富的功能和高度的定制性,让开发者能轻松处理各种定时任务。通过深入理解Quartz的工作原理和API,我们可以在项目中灵活运用,提高工作效率。

    quartz定时器配置与jar包

    本资料包将详细介绍如何在Spring框架中配置和使用Quartz定时器,并涉及到cron表达式的使用。 一、Quartz简介 Quartz是一个完全由Java编写的作业调度框架,能够精确地调度任务,支持简单或复杂的调度需求。Quartz的...

    简单实现Spring Quartz定时器

    本篇文章将深入探讨如何在Spring框架中简单实现Quartz定时器,并结合源码和工具来帮助理解其工作原理。 首先,让我们了解Spring与Quartz的集成。Spring提供了对Quartz的全面支持,使得在Spring应用中配置和管理定时...

    spring之quartz定时器

    《Spring与Quartz定时器深度解析》 在Java开发领域,Spring框架因其强大的功能和灵活性而备受推崇。其中,Spring对任务调度的支持是其一大亮点,尤其与Quartz的集成,使得开发者能够方便地实现定时任务。Quartz是一...

    spring quartz定时器的简单配置和使用

    本文将详细介绍如何在Spring项目中集成Quartz定时器,并通过一个简单的示例来进行演示。 #### 一、环境准备 为了能够顺利地运行示例代码,我们需要准备以下必要的依赖库: - `jta-1.1.jar`:用于事务管理。 - `...

    使用spring的quartz定时器要用到的jar包

    首先,要使用Spring的Quartz定时器,你需要确保引入了以下核心的jar包: 1. `quartz.jar`:这是Quartz的核心库,包含了Quartz的调度器、作业、触发器等核心组件。 2. `spring-context-support.jar`:Spring框架提供...

    定时器quartZ

    【标题】:“定时器Quartz” Quartz是一个开源的工作调度框架,它允许程序在特定时间执行任务,类似于Java中的ScheduledExecutorService,但提供了更高级别的功能。Quartz主要用于企业级应用,可以创建、调度和执行...

    quartz定时器的用法(简单和动态配置)

    本文将深入探讨Quartz定时器的简单使用和动态配置。 ### 一、Quartz的基本概念 1. **Job**:Job是执行的具体任务,它实现了`org.quartz.Job`接口。你可以定义自己的Job类,实现`execute`方法,里面包含你要执行的...

    shiro+SpringMVC+Spring+mybatis+maven+mybatis 自动刷新+ Quartz scheduler 定时器

    "shiro+SpringMVC+Spring+mybatis+maven+mybatis 自动刷新+Quartz scheduler 定时器"是一个常见的技术栈组合,每个组件都有其特定的功能和作用。 1. **Shiro**:Apache Shiro 是一个强大且易用的Java安全框架,提供...

    Quartz定时器

    在本压缩包中,你将找到关于Quartz定时器的源代码示例和配置说明,这将帮助你快速理解和使用这个强大的工具。 Quartz的核心概念包括: 1. **Job**:Job是执行的实体,代表一个具体的任务。你需要创建一个实现`org....

    SSM定时器quartz DEMO

    在Java世界里,Quartz是一个强大的工具,它能够处理大量的并发任务,并提供了丰富的API来创建、调度和管理任务。这个"SSM定时器quartz DEMO"是一个示例项目,用于演示如何在Spring、SpringMVC(SSM)架构中集成和...

    quartz定时器

    总的来说,Quartz定时器是一个强大且灵活的任务调度工具,它的易用性和可扩展性使其在Java开发中被广泛应用。通过理解并熟练掌握其核心概念和API,开发者可以有效地管理各种定时任务,提高系统的自动化程度和效率。

    SpringQuartz定时器的配置[参照].pdf

    Quartz本身是一个功能强大的任务调度框架,而Spring通过提供一些便利的类和工具,进一步简化了在Spring环境中使用Quartz的过程。 首先,为了使用Spring Quartz,你需要引入必要的依赖。在上述例子中,至少需要`...

Global site tag (gtag.js) - Google Analytics