`
ikon
  • 浏览: 102256 次
  • 性别: 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 触发器表达式生成器 准确的生成触发器生成器

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

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

    quartz触发器表达式生成器

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

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

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

    Quartz+Spring定时触发器例子

    自己写的Quartz+Sping定时触发器例子,包含全部jar包,可直接运行。注释完整,适合初学者学习。

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

    NULL 博文链接:https://hyj0903.iteye.com/blog/978153

    spring添加触发器+quartz

    spring添加触发器+quartz,做定时执行的功能

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

    Quartz所有dll:Common.Logging.Core.dll、Quartz.dll等 触发器时间简便捷配置器,

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

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

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

    该压缩包内包含两个quartz的jar包, 分别是quartz-1.6.0.jar和quartz-all-1.6.0.jar

    Spring Quartz执行定时任务.

    使用Spring Quartz执行定时任务

    quartz指南,Quartz 工程

    文件里面包括 1:Quartz开发指南.pdf 2:Quartz从入门到进阶.pdf 3:QuartzBeginnerExample一个附带的工程例子 4:quartz-1.6.1.zip Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它...

    任务调度开源框架Quartz动态添加、修改和删除定时任务

    Quartz框架包含了调度器监听、作业和触发器监听。你可以配置作业和触发器监听为全局监听或者是特定于作业和触发器的监听。Quartz 允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,...

    spring之quartz例子

    spring之quartz例子,与oracle整合,不过spring中的MethodInvokingJobDetailFactoryBean方法在存数据库时序列化有bug,在本例子中,使用了修复后的MethodInvokingJobDetailFactoryBean方法,避免了因序列化而报错。

    quartz-2.3.2-API文档-中文版.zip

    赠送jar包:quartz-2.3.2.jar; 赠送原API文档:quartz-2.3.2-javadoc.jar; 赠送源代码:quartz-2.3.2-sources.jar; 赠送Maven依赖信息文件:quartz-2.3.2.pom; 包含翻译后的API文档:quartz-2.3.2-javadoc-API...

    Quartz.NET 调度系统 demo

    本文使用一系列代码示例介绍 Quartz.NET API,演示它的机制,例如作业、触发器、作业仓库。 Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net...

    spring+quartz 动态任务方案

    虽然可以通过属性文件(在属性文件中可以指定 JDBC 事务的数据源、全局作业和/或触发器侦听器、插件、线程池,以及更多)配置 Quartz,但它根本没有与应用程序服务器的上下文或引用集成在一起。结果就是作业不能访问...

    Quartz_2.2.1_API

    虽然可以通过属性文件(在属性文件中可以指定 JDBC 事务的数据源、全局作业和/或触发器侦听器、插件、线程池,以及更多)配置 Quartz,但它根本没有与应用程序服务器的上下文或引用集成在一起。结果就是作业不能访问...

    quartz简单实例quartz简单实例

    quartz简单实例quartz简单实例quartz简单实例quartz简单实例

    QuartzAPI以及例子

    Quartz.NET是一个开源的作业调度框架,是...它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了 Quartz.NET的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业.

Global site tag (gtag.js) - Google Analytics