首页 > 技术文章 > quartz简单实现

JemmyChou 2016-02-02 18:05 原文

quartz介绍

  在我们的项目中,经常会遇到某个任务需要在特定的时间点执行,这个时间点可能是每天的某分某秒,可能是一周的指定某个星期某个时间等;quartz就是实现这样一个复杂任务调度逻辑的框架。

  官方介绍:http://www.quartz-scheduler.org/

quartz实现

  quartz实现比较简单。

  1. Ijob接口实现

    public interface IJob     {         void Execute(IJobExecutionContext context);     }

  2. 配置调度策略

    

<?xml version="1.0" encoding="UTF-8"?>

<!-- This file contains job definitions in schema version 2.0 format -->

<job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0">

  <processing-directives>
    <overwrite-existing-data>true</overwrite-existing-data>
  </processing-directives>

  <schedule>
    <job>
        <!--任务名称-->
        <name>JobTest</name>
        <!--任务分组-->
        <group>Test</group>
        <description>元叹测试quartz</description>
        <!--任务命名控件.类名,类名-->
        <job-type>QuartzTest.JobTest, QuartzTest</job-type>
        <durable>true</durable>
        <recover>false</recover>
    </job>
    <trigger>
      <!--简单模式,隔一段时间执行一次,可配执行次数-->
      <simple>
        <!--调度名称-->
        <name>sampleSimpleTrigger</name>
        <!--调度分组-->
        <group>simplegroup</group>
        <!--调度描述-->
        <description>Simple trigger to simply fire sample job</description>
        <!--作业名称,job节点对应名称-->
        <job-name>JobTest</job-name>
        <!--作业分组,job节点对应分组-->
        <job-group>Test</job-group>
        <misfire-instruction>SmartPolicy</misfire-instruction>
        <!--重复执行次数,执行次数=此值+1-->
        <repeat-count>2</repeat-count>
        <!--执行间隔时间,毫秒单位-->
        <repeat-interval>2000</repeat-interval>
      </simple>
      <cron>
        <name>TestJobTrigger</name>
        <group>Test</group>
        <job-name>JobTest</job-name>
        <job-group>Test</job-group>
        <!--开始调度时间,大于当前时间忽略-->
        <start-time>2015-11-26T22:19:00+08:00</start-time>
        <!--cron表达式-->
        <cron-expression>0/3 * * * * ?</cron-expression>
      </cron>
    </trigger>
  </schedule>
</job-scheduling-data>

  3. 动态编程实现调度

        ISchedulerFactory schedf = new StdSchedulerFactory();
            IScheduler sched = schedf.GetScheduler();

            IJobDetail jobDetail = JobBuilder.Create<JobTest>().Build();

            IJobDetail jobDetail2 = JobBuilder.Create<JobTest2>().Build();

            ITrigger simpleTrigger = (ISimpleTrigger)TriggerBuilder.Create().WithSimpleSchedule(x => x.WithIntervalInSeconds(2).WithRepeatCount(5)).Build();

            ITrigger crontrigger = (ICronTrigger)TriggerBuilder.Create().WithCronSchedule("0/5 * * * * ? ").Build();

            sched.ScheduleJob(jobDetail, crontrigger);

            sched.ScheduleJob(jobDetail2, simpleTrigger);

            sched.Start();

 

推荐阅读