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/ 這個在國內打開可能很慢

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章