Quartz开发-基础开发

开发环境

.net 4.5.1
quartz.dll v2.4.1.0 依赖下面的dll
Common.Loggin.dll v3.3.1.0 依赖下面的dll
Common.Loggin.Core.dll v3.3.1.0
本次教程只介绍基于quartz_jobs.xml配置文件方式的开发,这也是简单且常见的方式

Quartz核心概念

1、Job 表示一个工作任务,业务代码的执行入口,业务代码需要继承Quartz.IJob接口并实现Execute方法,此方法即业务代码的入口函数
2、JobDetail 表示一个上体的可执行的调度程序
3、Trigger 代表一个调度参数的配置,调度方案与执行计划
4、Scheduler 代表一个调度容器,可以注册多个JobDetail和Trigger
5、SchedulerPlugin 调度插件,自定义插件需要继承 Quartz.Spi.ISchedulerPlugin
6、SchedulerListener 调度监听器,自定义需要继承 Quartz.ISchedulerListener
7、TriggerListener 触发器监听器,自定义需要继承 Quartz.ITriggerListener
8、JobListener 工作任务监听器,自定义需要继承 Quartz.IJobListener

业务开发介绍

这一块的基础实现其实很简单,只需要继承Quartz.IJob类,并实际Execute方法,此方法是业务代码执行的入口,将业务代码写好,并配置好quartz_jobs.xml文件即可运行

示例:
1、新建一个类库项目,并引入Quartz.dll

using System;
using Quartz;

namespace QuartzTestJob
{
    public class TestJob : Quartz.IJob
    {
        public void Execute(IJobExecutionContext context)
        {
        	Console.WriteLine("执行业务代码");
            Console.WriteLine("这是单独DLL文件的业务代码-v1.0.2");
        }
    }
}

2、编译上面的代码并生成dll文件,即完成了最简单的业务代码部分
3、配置工作任务与触发器 quartz_jobs.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<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>TestJob2Job</name>
      <group>TestJob2JobGroup</group>
      <description>测试JOB</description>
      <job-type>QuartzTestJob.TestJob,QuartzTestJob</job-type>
      <durable>true</durable>
      <recover>false</recover>
    </job>
    <trigger>
        <cron>
        	<name>TestJob2Trigger</name>
        	<group>TestJob2TriggerGroup</group>
        	<job-name>TestJob2Job</job-name>
        	<job-group>TestJob2JobGroup</job-group>
        	<start-time>2015-01-01T00:00:00+08:00</start-time>
       	 	<cron-expression>0 */1 * * * ? </cron-expression>
      </cron> 
    </trigger>
  </schedule>
</job-scheduling-data>

配置介绍:

一个Job块对应一个Trigger块,不然不会工作,具体工作原理可通过反编译Quartz.dll文件,看看Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin 这个类的代码,他是怎么解析这个配置文件的,我没去研究。

JOB 块

name: job的名称,必须全局唯一
group:job的分组,quartz有按组暂停job的能力,非必填,Quartz会自动生成,下面的相关的也类型
job-type: 这个是业务dll的Type,基于C#的反射功能完成,分为两段,第一段是完整的类型名,包含:命令空间,类名,第二段我的理解应该是dll文件名称,刚开始研究的时候就犯过这个错误,dll文件名和命令空间名称不一致,导致代码一直不执行,又不报错,完全不知道原因。

trigger 块

调度类型,共有四种类型,常用的是cron和simple这两种,
cron 类似于Linux的计划任务那种 0 0/2 * * * ?
simple 可以设置执行次数和执行间隔,两种的配置格式以示例一样,

cron块

name: 触发器名称,必须唯一
group:分组,非必填
job-name: 关联的job名称
job-group:关联的job分组,非必填
start-time: 开始日期与时间
cron-expression: 调度计划,可以参考https://www.w3cschool.cn/quartz_doc/quartz_doc-lwuv2d2a.html

simple块

name: 触发器名称,必须唯一
group:分组,非必填
job-name: 关联的job名称
job-group:关联的job分组,非必填
repeat-count:执行次数,-1 代表永不停止
repeat-interval:执行间隔,单位毫秒

4、新建一个控制台项目,并引入Quartz.dll,在main方法中初始化Scheduler并启动即可运行代码了

using Quartz;
using Quartz.Impl;
namespace QuartzTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Quartz.IScheduler scheduler = Quartz.Impl.StdSchedulerFactory.GetDefaultScheduler();
            scheduler.Start();
        }

    }

5、quartz.conf 文件介绍

这是quartz的配置文件,介绍几个常见的参数,一般下载回来的包里面都已经有默认设置了,无需修改

#调度容器的实例名称,很少使用
quartz.scheduler.instanceName = QuartzTest
#调度容器内的工作线程引用的类型
quartz.threadPool.type = Quartz.Simpl.SimpleThreadPool, Quartz
#工作线程数量,可根据自己的任务数量调大,以防任务数量太多,有些任务无线程可用
quartz.threadPool.threadCount = 10
#优先级设置,默认吧。不知道怎么配置
quartz.threadPool.threadPriority = Normal

#这是官方自带的插件,用来解析我们在quartz_jobs.xml中配置的任务与触发器,
quartz.plugin.xml.type = Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz
#配置文件的名称
quartz.plugin.xml.fileNames = ~/quartz_jobs.xml
引用参考

https://www.w3cschool.cn/quartz_doc/
http://www.quartz-scheduler.org/ 这个在国内打开可能很慢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值