`
ikon
  • 浏览: 107846 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

理解Quartz触发器(1)

 
阅读更多

Quartz中一个Job往往是一个任务业务逻辑的实现,Job并不知道何时被执行。那么执行一个Quartz Job的是一个Trigger实例。Quartz Trigger继承了Quartz框架中的org.quartz.Trigger类,在Quartz框架中目前有三个实现的触发器可用:

· org.quartz.SimpleTrigger

· org.quartz.CronTrigger

· org.quartz.NthIncludedDayTrigger

其实还有一个触发器实现,叫做UICronTrigger,不过在Quartz1.5版本之后,这个触发器便不推荐使用。它主要用在Quartz Web应用程序中,Quartz本身并不再使用。


使用org.quartz.SimpleTrigger

从类的命名上,想必聪明的你已经明白,SimpleTrigger主要是针对一些相对简单的时间触发进行配置使用,比如在指定的时间开始然后在一定的时间间隔之内重复执行一个Job,同事可以任意指定重复的次数.下面就是使用一个SimpleTrigger的例子:


public class Listing_4_9 {
static Log logger = LogFactory.getLog(Listing_4_9.class);

public static void main(String[] args) {
Listing_4_9 example = new Listing_4_9();
example.startScheduler();
}

public void startScheduler() {
try {
// 创建并启动调度实例
Scheduler scheduler =
StdSchedulerFactory.getDefaultScheduler();
scheduler.start();
logger.info("Scheduler has been started");
JobDetail jobDetail =
new JobDetail("PrintInfoJob",
Scheduler.DEFAULT_GROUP,
PrintInfoJob.class);
/*
* 创建一个立即启动的触发器,这个触发器没有结束日期,每一分钟(60000毫秒)
* 执行一次。
*/
Trigger trigger =
new SimpleTrigger("myTrigger",
Scheduler.DEFAULT_GROUP, new Date(), null,
SimpleTrigger.REPEAT_INDEFINITELY,
60000L);
scheduler.scheduleJob(jobDetail, trigger );
} catch (SchedulerException ex) {
logger.error(ex);
}
}
}
在SimpleTrigger中有多个构造函数。下面的代码创建了一个带有名称和默认组的trigger:

//No Argument Constructor
SimpleTrigger sTrigger = new SimpleTrigger("myTrigger", Scheduler.DEFAULT_GROUP);
上面创建这个触发器在创建后便立即执行,单并且没有重复。同样SimpleTrigger还有其他构造函数参数来配置创建特定时间、重复次数和触发器每次执行的延迟时间,如下面这个构造函数:

public SimpleTrigger(String name, String group, String jobName, String jobGroup, Date startTime, Date endTime, int repeatCount, long repeatInterval);
使用org.quartz.CronTrigger
CronTrigger可以配置更复杂的触发时刻表,当然使用一个或者多个SimpleTriggers也许同样可以达到效果,但是CronTrigger却可以用更简单的方法解决更复杂的事情。

CronTrigger的时刻表配置类似于Unix下的cron表达式。比如,可能有这样一个Job需要在每周的星期一和星期五早上8点到9点每五分钟执行一次,如果直接使用SimpleTrigger来实现的话,想必要费一些周折。那么此时就可以使用一个类似于cron表达式的表达语句来指定此触发时刻表。

"0 0/5 8 ? * MON,FRI"
try {
CronTrigger cTrigger = new CronTrigger("myTrigger",
Scheduler.DEFAULT_GROUP, "0 0/5 8 ? *MON,FRI");
} catch (ParseException ex) {
ex.printStackTrace();
}
CronTriggers在时刻的触发配置上拥有非常大的弹性,几乎可以创建所有的时刻表表达式。后续我们会更详细的讲解CronTriggers和cron表达式的用法。

使用 org.quartz.NthIncludedDayTrigger
org.quartz.NthIncludedDayTrigger是Quartz开发团队在Quartz框架中新添加的一个触发器。它设计的目标是提供不同时间间隔的第n天执行时刻表。比如,你想在每个月的第15日处理财务发票记帐,那么可以使用NthIncludedDayTrigger来完成这项工作。Quartz日历(Calendar)同样可以和一个触发器进行关联来设定双休日或者假期。下面我们来创建一个实例来说明如何使用NthIncludedDayTrigger:

NthIncludedDayTrigger trigger =
new NthIncludedDayTrigger("MyTrigger", Scheduler.DEFAULT_GROUP);
trigger.setN(15);
trigger.setIntervalType(NthIncludedDayTrigger.INTERVAL_TYPE_MONTHLY);

分享到:
评论

相关推荐

    quartz 触发器表达式生成器

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

    Quartz+Spring定时触发器例子

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

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

    Quartz是一个开源的作业调度框架,它允许开发者在.NET环境中安排任务执行。这个"Quartz所有dll+触发器时间简便捷配置器"包含了Quartz...无论是理解Quartz的内部工作原理,还是快速构建自己的调度系统,都能从中受益。

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

    Quartz是一款广泛使用的开源任务调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在Quartz 2.2.3版本中,初始化数据库是使用...正确理解和使用这些SQL语句,有助于确保Quartz在各种数据库环境中稳定运行。

    quartz动态任务管理

    学习和理解这个源码包,可以帮助你深入理解Quartz的工作原理,以及如何在实际项目中灵活运用。通过分析和实践,你可以掌握如何创建动态任务,如何根据业务需求调整任务执行策略,以及如何进行错误处理和监控。这将对...

    quartz quartz-1.8.6 dbTables 建表sql

    Quartz 是一个开源的作业调度框架,广泛应用于Java应用程序中,用于执行定时任务。它提供了丰富的API和灵活性,...通过理解和正确应用这些脚本,开发者可以充分利用Quartz的强大功能,创建和管理复杂的时间驱动任务。

    quartz实例,quartz入门例子

    这个实例是为初学者设计的,用于帮助理解Quartz的基本概念和使用方式。在MyEclipse 6.0.1环境下,你可以直接运行这个Spring整合Quartz的示例项目,以便深入学习Quartz的调度功能。 Quartz的核心概念包括: 1. **Job...

    四个Quartz的简单的例子

    从创建作业和触发器,到调度和管理任务,每个示例都会逐步引导你理解Quartz的工作原理。同时,你可以结合Spring框架,使用`@DisallowConcurrentExecution`和`@PersistJobDataAfterExecution`注解来处理并发执行和...

    Quartz.NET 官方源码及演示例子

    - **阅读文档**:`doc`目录中的文档可以帮助理解Quartz.NET的高级特性,如集群支持、并发控制和故障转移。 通过以上步骤,你可以全面掌握Quartz.NET的使用和开发,不仅能够利用它为你的应用程序添加定时任务功能,...

    定时任务quartz实现分组串行并行动态配置

    首先,理解Quartz的核心概念是必要的。`Job`是执行任务的基本单元,`Trigger`则决定了何时触发Job。Quartz提供了`Scheduler`来管理和调度这些Job和Trigger。`JobGroup`是Job的集合,可以用来组织和管理相关的Job。 ...

    quartz-1.4.5以及源码

    通过`quartz-1.4.5-sources.jar`,我们可以深入理解Quartz的内部工作原理。例如: - `org.quartz.Job`接口是所有任务类的基类,你需要实现它的execute方法来定义任务逻辑。 - `org.quartz.Trigger`接口定义了触发器...

    quartz和spring-quartz

    Quartz和Spring-Quartz是两个在Java世界...“spring-quartz-demo”可能是一个完整的示例项目,你可以通过运行它来深入理解Quartz在Spring中的应用。通过研究这些资源,你可以更全面地掌握Quartz和Spring-Quartz的用法。

    quartz-1.6.0 jar&src

    1. **灵活的调度**:Quartz 支持多种调度模式,如简单触发器、cron 触发器和作业链,允许你精确控制任务的执行时间。 2. **可集群**:Quartz 可以在多台服务器上运行,实现任务的高可用性和负载均衡,确保在任何一台...

    quartz实例

    通过学习和运行这个实例,你可以深入理解Quartz的工作原理,并将其应用到自己的项目中,实现定时任务的自动化调度。确保根据你的项目需求调整触发器和作业的设置,以及正确配置Quartz以适应你的环境。

    quartz-all.zip

    通过上述知识点,我们可以理解Quartz-all.zip文件如何与Spring结合,实现定时任务的自动化执行。这个整合方案对于需要周期性执行任务的系统来说非常实用,例如数据同步、报表生成、清理过期记录等。

    基于java的Quartz的实例

    Quartz是Java领域一个强大的、开源的工作调度框架,它允许开发者创建、调度和管理作业,以执行复杂的定时任务。在本实例中,我们将探讨如何基于Java...这个实例可以帮助你更好地理解和运用Quartz框架,提高工作效率。

    作业调度Quartz.net源代码

    Quartz.NET是一个开源的工作调度框架,它允许开发者在.NET环境中创建和执行计划任务。这个“作业调度Quartz.net源代码...通过实践这些示例,你将更好地理解Quartz.NET的工作原理,从而在自己的项目中灵活运用作业调度。

    《Quartz开发指南》pdf

    Quartz是一款开源的Java作业调度框架,...这本书对于理解Quartz的底层机制和实现高效、可靠的定时任务非常有帮助。通过阅读并实践书中的内容,你将能够熟练掌握这个强大的工具,为你的Java应用添加智能的时间驱动功能。

    quartz集群各种数据库建表脚本

    Quartz是一款开源的作业调度框架,它允许开发者在Java应用程序中定义定时任务。在大型分布式系统中,为了提高系统的容错性和高...同时,了解和理解这些表的结构和作用,对于理解和优化Quartz集群的工作机制也至关重要。

    Quartz-JOB-Framework 中文版和QUartz开发指南 .zip

    "Quartz开发指南.pdf"则提供了更深入的开发指导,这通常包括实际编程示例,帮助开发者理解如何在项目中集成Quartz,编写作业类,定义触发器,以及处理并发和恢复策略。书中可能还有关于如何使用书签功能快速定位到...

Global site tag (gtag.js) - Google Analytics