zoukankan      html  css  js  c++  java
  • Quartz(自动任务)中的触发器Trigger

    1.Quartz中的触发器Trigger
    Job 包含了要执行任务的逻辑,但是 Job 对何时该执行却一无所知。这个事情留给了 Trigger。Quartz Trigger 继承了抽象的 org.quartz.Trigger 类。当前,Quartz 有三个可用的 Trigger:

    Java代码
    1. ·org.quartz.SimpleTrigger
    2. ·org.quartz.CronTrigger
    3. ·org.quartz.NthIncludeDayTrigger



    2.SimpleTrigger的介绍
    正如其名所示,SimpleTrigger对于设置和使用是最为简单的一种 Quartz Trigger。它是为那种需要在特定的日期/时间启动,且以一个可能的间隔时间重复执行 n 次的 Job 所设计的。
    我们前面已经在一个简单的Quartz的例子里使用过了SimpleTrigger,我们通过

    Java代码
    1. Trigger trigger = TriggerUtils.makeSecondlyTrigger(10);


    来获取到我们的Trigger,而得到的实际上就是SimpleTrigger类的一个实现;我们实际上
    还可以对上面的代码进行小小的改造:

    Java代码
    1. Trigger trigger =
    2. new SimpleTrigger("myTrigger",Scheduler.DEFAULT_GROUP,
    3. new Date(),null,SimpleTrigger.REPEAT_INDEFINITELY,60000L);


    对于Quartz而言,它还不能满足我们的触发情况,所以它仅仅是用于一些简单的触发情况;

    3.org.quartz.CronTrigger
    CronTrigger 允许设定非常复杂的触发时间表。然而有时也许不得不使用两个或多个 SimpleTrigger 来满足你的触发需求,这时候,你仅仅需要一个 CronTrigger 实例就够了。顾名思义,CronTrigger 是基于 Unix 类似于 cron 的表达式。例如,你也许有一个 Job,要它在星期一和星期五的上午 8:00-9:00 间每五分钟执行一次。假如你试图用 SimpleTrigger 来实现,你或许要为这个 Job 配置多个 Trigger。然而,你可以使用如下的表达式来产生一个遵照这个时间表触发的 Trigger;
    比如:

    Java代码
    1. try {
    2. CronTrigger cTrigger = new CronTrigger("myTrigger",
    3. Scheduler.DEFAULT_GROUP, "0 0/5 8 ? *
    4. MON,FRI");
    5. } catch (ParseException ex) {
    6. ex.printStackTrace();
    7. }


    因为 CronTrigger 内建的如此强的灵活性,也与生俱来可用于创建几乎无所限制的表达式,且因为支持unix的cron表达式,则做为企业应用,我们的操作系统一般也都以unxi操作系统为主,所以掌握CronTrigger 的使用费用有必要,我们将在后面对CronTrigger 进行详细的介绍;

    4.org.quartz.NthIncludedDayTrigger
    org.quartz.NthIncludedDayTrigger 是 Quartz 开发团队最新加入到框架中的一个 Trigger。它设计用于在每一间隔类型的第几天执行 Job。例如,你要在每个月的 15 号执行开票的 Job,用 NthIncludedDayTrigger就再合适不过了。Quartz的 Caldendar 也可与 Trigger 关联以此把周末与节假日考虑进来,并在必要时跳开这些日期。接下来的代码片断描绘了如何创建一个 NthIncludedDayTrigger.

    Java代码
    1. NthIncludedDayTrigger trigger =
    2. new NthIncludedDayTrigger("MyTrigger",Scheduler.DEFAULT_GROUP);
    3. trigger.setN(15);
    4. trigger.setIntervalType(NthIncludedDayTrigger.INTERVAL_TYPE_MONTHLY);



    5.Job与Trigger的关系
    大家都知道,一个作业,比较重要的三个要素就是Schduler,jobDetail,Trigger;
    而Trigger对于job而言就好比一个驱动器;没有触发器来定时驱动作业,作业就无法运行;
    对于Job而言,一个job可以对应多个Trigger,但对于Trigger而言,一个Trigger只能对应一个job;所以一个 Trigger 只能被指派给一个 Job;
    如果你需要一个更复杂的触发计划,你可以创建多个 Trigger 并指派它们给同一个 Job。Scheduler 是基于配置在 Job 上的 Trigger 来决定正确的执行计划的,下面就是为同一个 JobDetail 使用多个Trigger;

    Java代码
  • 相关阅读:
    java.io.IOException: Premature EOF
    springmvc集成shiro例子
    eclipse调试(debug)的时候,出现Source not found,Edit Source Lookup Path,一闪而过
    【译】Core Java Questions and Answers【1-33】
    Spring bean依赖注入、bean的装配及相关注解
    【译】Spring 4 基于TaskScheduler实现定时任务(注解)
    【译】Spring 4 + Hibernate 4 + Mysql + Maven集成例子(注解 + XML)
    【译】Spring 4 @Profile注解示例
    【译】Spring 4 @PropertySource和@Value注解示例
    【译】Spring 4 自动装配、自动检测、组件扫描示例
  • 原文地址:https://www.cnblogs.com/qihuan/p/5150244.html
Copyright © 2011-2022 走看看