顾名思义,Trigger(触发器)的责任就是触发一个 Job 去执行。当用 Scheduler 注册一个 Job 的时候要创建一个 Trigger 与这个 Job 相关联。Quartz 提供了四种类型的 Trigger,但其中两种是最为常用的,分别是下面的两种:SimpleTrigger 和 CronTrigger.

SimpleTrigger 是两个之中简单的那个,它主要用来激发单事件的 Job,Trigger 在指定时间激发,并重复 n 次--两次激发时间之间的延时为 m,然后结束作业。

CronTrigger 非常复杂且强大。它是基于通用的公历,当需要用一种较复杂的时间表去执行一个 Job 时用到。

为更简单的使用 Trigger,Quartz 包含了一个工具类,叫做 org.quartz.TriggerUtils.TriggerUtils 提供了许多便捷的方法简化了构造和配置 trigger.

首先说下SimpleTrigger实例化方式:

1、构造方法SimpleTrigger simpleTrigger = new SimpleTrigger("simpleTrigger", "triggerGroup-s1");

SimpleTrigger 提供了多种构造方法供实例化,可以通过设置属性值来设定触发器状态,具体可以参考API中SimpleTrigger

比如设置启动时间为当前时间:simpleTrigger.setStartTime(new Date());

设置执行间隔时间(毫秒)为10秒:simpleTrigger.setRepeatInterval(10000);

设置重复次数10次:simpleTrigger.setRepeatCount(10);

设置优先级simpleTrigger.setPriority(10);等等。

2、通过TriggerUtils的静态方法实例化,具体可以参考APITriggerUtils的静态方法

例如makeImmediateTrigger(String trigName, int repeatCount, long repeatInterval)

其中repeatCount如果为-1表示一直执行

repeatInterval表示执行次数

其中还包含很多类似方法,针对年月日周等不同情况来实例化触发器

3、通过web加载xml文件来配置,前面第二节中讲到web应用的简单示例。在定义XML的时候有如下触发器标签和内容

<trigger>
      <cron>
        <name>job1</name>
        <group>group1</group>
        <job-name>listener1</job-name>
        <job-group>group1</job-group>
        <cron-expression>0/10 * * * * ?</cron-expression>
     </cron>
 </trigger>

这种方式是下面要讲到的CronTrigger.触发器方式,而SimpleTrigger也有可以通过XML来配置,例如:

<trigger>
      <simple>
        <name>job1</name>
        <group>group1</group>
        <job-name>listener1</job-name>
        <job-group>group1</job-group>
        <start-time>2010-04-22 8:31:00 AM</start-time>         
        <repeat-count>-1</repeat-count>     
        <repeat-interval>10000</repeat-interval>
     </simple>

</trigger>

注意红色标记部分。通过设置参数来实现触发时间和具体触发情况

CronTrigger实例化方式:

1、通过构造方法来实例化:

CronTrigger ct1 = new CronTrigger("cronTrigger1","defaultGroup");
CronExpression cexp1 = new CronExpression("0 45 7 * * ?");
ct1.setCronExpression(cexp1);

以上示例是设置每天早晨7.45分执行一次,具体的CronExpression可以参考API或者学习linux的crontab定时任务命令,定义具体差不多,还可以学习下linux的定时任务。

2.通过web加载XML。例如

<trigger>
      <cron>
        <name>job1</name>
        <group>group1</group>
        <job-name>listener1</job-name>
        <job-group>group1</job-group>
        <cron-expression>0/10 * * * * ?</cron-expression>
     </cron>

</trigger>

表示每10秒执行一次

以上几种都在前面有例子了,下面给出CronTrigger实例化方式的构造方法例子:

public void task() throws SchedulerException {  
CronTrigger ct1 = new CronTrigger("cronTrigger1","defaultGroup");
try {
   CronExpression cexp1 = new CronExpression("0/10 * * * * ?");
   ct1.setCronExpression(cexp1);
} catch (Exception e) {
   e.printStackTrace();
}
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler= schedulerFactory.getScheduler();
JobDetail jobDetail = new JobDetail("jobDetail1", "jobGroup", MyJob1.class);
scheduler.scheduleJob(jobDetail, ct1);
scheduler.start();
}

Quartz定时任务学习(五)触发器的更多相关文章

  1. Quartz定时任务学习(二)web应用/Quartz定时任务学习(三)属性文件和jar

    web中使用Quartz 1.首先在web.xml文件中加入 如下内容(根据自己情况设定) 在web.xml中添加QuartzInitializerServlet,Quartz为能够在web应用中使用 ...

  2. Quartz定时任务学习(二)web应用

    web中使用Quartz 1.首先在web.xml文件中加入 如下内容(根据自己情况设定) 在web.xml中添加QuartzInitializerServlet,Quartz为能够在web应用中使用 ...

  3. Quartz定时任务学习(七)Cron 触发器

    Cron表达式 Quartz使用类似于Linux下的Cron表达式定义时间规则,Cron表达式由6或7个由空格分隔的时间字段组成,如表1所示: 位置 时间域名 允许值 允许的特殊字符 1 秒 0-59 ...

  4. Quartz定时任务学习(一)简单任务

    学习quartz首先了解三个概念: 调度器:负责调度作业和触发器: 触发器:设置作业执行的时间.参数.条件等:(简单触发器和Cron触发器) 作业:定时任务内容,被执行的程序: 下载必要的jar包,直 ...

  5. Quartz定时任务学习(九)Quartz监听器

    Quartz 提供了三种类型的监听器:监听 Job 的,监听 Trigger 的,和监听 Scheduler 自已的. 本章解释如何应用每一种类型来更好的管理你的 Quartz 应用,并获悉到什么事件 ...

  6. Quartz定时任务学习(六)作业

    org.quartz.Job 接口 把 Quartz 作用到 Java 类上唯一要做的就是让它实现 org.quartz.Job 接口.你的 Job 类可以实现任何其他想要的接口或继承任何需要的基类, ...

  7. Quartz定时任务学习(三)属性文件和jar

    以下是我在应用的的一个基本配置: #---------调度器属性----------------org.quartz.scheduler.instanceName = TestSchedulerorg ...

  8. Quartz定时任务学习(四)调度器

    org.quartz.Scheduler 类层次 作为一个 Quartz 用户,你要与实现了 org.quartz.Scheduler 接口的类交互.在你调用它的任何 API 之前,你需要知道如何创建 ...

  9. Java学习---Quartz定时任务快速入门

    Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个, ...

随机推荐

  1. ios8.1.2耗电情况严重的解决方法

    打开cydia,搜索ifile(威锋源,版本2.1.0-1).打开ifile,进入路径/Applications.里面有许多程序文件,选择适当的进行禁用(ifile可以禁用程序的活动而不完全删除它,这 ...

  2. 腾讯面试题 腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?

    腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?  这个题目已经有一段时间了,但是腾讯现在还在用来面试.腾讯第一次面 ...

  3. jsp调用javabean出现错误HTTP Status 500 - Unable to compile class for JSP

    HTTP Status 500 - Unable to compile class for JSP:   type Exception report message Unable to compile ...

  4. raywenderlich-iOS设计模式Part 1/2【译】

    原文地址:http://www.raywenderlich.com/86477/introducing-ios-design-patterns-in-swift-part-1 Update 04/22 ...

  5. Solve Longest Path Problem in linear time

    We know that the longest path problem for general case belongs to the NP-hard category, so there is ...

  6. 我是如何实用:before :after

    本文地址http://www.cnblogs.com/Bond/p/3972854.html 最近一直做移动端,没和IE6打交道了,瞬间感觉世界变美好了.移动端虽然还是各种坑,但是比起修复IE6那还是 ...

  7. 如何使用 HTTP 响应头字段来提高 Web 安全性?

    在 Web 服务器做出响应时,为了提高安全性,在 HTTP 响应头中可以使用的各种响应头字段. X-Frame-Options 该响应头中用于控制是否在浏览器中显示 frame 或 iframe 中指 ...

  8. [wikioi]线段覆盖 2

    http://wikioi.com/problem/3027/ # 有个小错误调了半天,最终发现sort(line, line+N)错了,后面那个是exclusive的,所以要line+N+1.# 按 ...

  9. 码云分布式之 Brzo 服务器

    摘要: 码云是国内最大的代码托管平台,为了支持更大的用户规模,开发团队也在对一些组件进行大规模的重构. 前言 码云是国内最大的代码托管平台.码云基于 Gitlab 5.5 开发,经过几年的开发已经和官 ...

  10. Android 使用LinearLayout.getChildAt(i)获取一个线性布局的view,并实现content中实现方法

    1.定义接口content的方法,如ok,cancle; 2.在View的处理类myview中实现content的方法. 3.通过contently.getChildAt(i)的方法获得View v; ...