quartz简单实现

时间:2023-03-08 19:12:27

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();