zoukankan      html  css  js  c++  java
  • Quartz定时任务学习(五)触发器

     顾名思义,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();
    }

  • 相关阅读:
    HDU 5115 Dire Wolf (区间DP)
    HDU 4283 You Are the One(区间DP(最优出栈顺序))
    ZOJ 3469 Food Delivery(区间DP好题)
    LightOJ 1422 Halloween Costumes(区间DP)
    POJ 1651 Multiplication Puzzle(区间DP)
    NYOJ 石子合并(一)(区间DP)
    POJ 2955 Brackets(括号匹配一)
    POJ 1141 Brackets Sequence(括号匹配二)
    ZOJ 3537 Cake(凸包+区间DP)
    Graham求凸包模板
  • 原文地址:https://www.cnblogs.com/a757956132/p/4552577.html
Copyright © 2011-2022 走看看