Quartz.net通過配置文件建立job和trigger

        在上一篇文章當中,我簡單的介紹了直接在代碼中進行作業和觸發器的建立,Quartz的強大之處在於其的配置文件,所以,這一篇博客主要講怎麼通過配置文件來建立作業和觸發器。

        首先我們創建作業調度器和和啓動調度器:

static void Main(string[] args)
{
    // 創建作業調度器
    ISchedulerFactory chedulerFactory = new StdSchedulerFactory();
    IScheduler scheduler = chedulerFactory.GetScheduler();
 
    // 啓動調度器

    scheduler.Start();
}

接着創建作業:

public class NewJob : IJob
{
    
    public async Task Execute(IJobExecutionContext context)
    { 
        Console.WriteLine(DateTime.Now);
    }
}

        接下來就是我們的重頭戲了,我們通過配置文件來進行Quartz的使用,我們需要建立一個quartz_jobs.xml的文件,千萬記得要將該文件的屬性選擇爲始終複製,如下:

<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>Job</name>
        <!--組名,隨便取-->
      <group>group</group>
        <!--描述-->
      <description>job</description>
        <!--作業類,要定位到我們代碼中創建的作業,命名空間.類名-->
      <job-type>QuartzTest.NewJob, QuartzTest</job-type>
      <durable>true</durable>
      <recover>false</recover>
      
    </job>

    <trigger>
        <!--簡單的觸發器-->
      <simple>
        <!--觸發器名字,隨便取-->
        <name>Trigger</name>
        <!--組名-->
        <group>group</group>
        <!--描述-->
        <description>trigger</description>
        <!--作業名,觸發哪個作業-->
        <job-name>Job</job-name>
        <!--作業的組名,與作業對應-->
        <job-group>group</job-group>
        <misfire-instruction>SmartPolicy</misfire-instruction>
        <!--任務執行次數,-1爲無限執行-->
        <repeat-count>-1</repeat-count>
        <!--每5000毫秒執行一次-->
        <repeat-interval>5000</repeat-interval>
      </simple>
    </trigger>

  
  </schedule>
</job-scheduling-data>

        光有這個文件還不行,我們還需要一個配置文件,也就是要讓程序知道我們讀取哪一個配置文件,有兩種配置文件的寫法,第一種是使用App.config進行:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
      <section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />

  </configSections>
  <quartz>
    <add key="quartz.scheduler.instanceName" value="ServerScheduler" />

    <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
    <add key="quartz.threadPool.threadCount" value="10" />
    <add key="quartz.threadPool.threadPriority" value="2" />

    <add key="quartz.plugin.xml.type" value = "Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz" />
    <add key="quartz.plugin.xml.fileNames" value = "quartz_jobs.xml" />
    
    <add key="quartz.jobStore.misfireThreshold" value="60000" />
    <add key="quartz.jobStore.type" value="Quartz.Simpl.RAMJobStore, Quartz" />
  </quartz>
</configuration>

        如果使用的是Quartz.net3.x版本的,記得修改爲:

<add key="quartz.plugin.xml.fileNames" value = "~/quartz_jobs.xml" />

        第二種是使用quartz.config,這裏也記得千萬選擇始終複製,當然,會在根節點出現紅色的波浪線,不用管它,完全沒事


# You can configure your scheduler in either <quartz> configuration section
# or in quartz properties file
# Configuration section has precedence
quartz.scheduler.instanceName = ServerScheduler
# configure thread pool info
quartz.threadPool.type = Quartz.Simpl.SimpleThreadPool, Quartz
quartz.threadPool.threadCount = 10
quartz.threadPool.threadPriority = Normal
# job initialization plugin handles our xml reading, without it defaults are used
quartz.plugin.xml.type = Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz
quartz.plugin.xml.fileNames = ~/quartz_jobs.xml
# export this server to remoting context
quartz.scheduler.exporter.type = Quartz.Simpl.RemotingSchedulerExporter, Quartz
quartz.scheduler.exporter.port = 555
quartz.scheduler.exporter.bindName = QuartzScheduler
quartz.scheduler.exporter.channelType = tcp
quartz.scheduler.exporter.channelName = httpQuartz

        好了,現在就可以進行測試了,測試結果就是每五秒輸出一下當前的事件時間。

        我們這裏使用的是簡單的觸發器,那怎麼使用cron表達式的觸發器呢?需要修改配置文件quartz_jobs.xml,代碼如下:

<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>Job</name>
        <!--組名,隨便取-->
      <group>group</group>
        <!--描述-->
      <description>job</description>
        <!--作業類,要定位到我們代碼中創建的作業,命名空間.類名-->
      <job-type>QuartzTest.NewJob, QuartzTest</job-type>
      <durable>true</durable>
      <recover>false</recover>
      
    </job>

    <trigger>
        <!--cron表達式觸發器-->
      <cron>
        <!--觸發器名字,隨便取-->
        <name>Trigger</name>
        <!--組名-->
        <group>group</group>
        <!--描述-->
        <description>trigger</description>
        <!--作業名,觸發哪個作業-->
        <job-name>Job</job-name>
        <!--作業的組名,與作業對應-->
        <job-group>group</job-group>
        <misfire-instruction>SmartPolicy</misfire-instruction>
        <cron-expression>0/5 * * * * ?</cron-expression>
      </cron>
    </trigger>

  
  </schedule>
</job-scheduling-data>

        整個框架從基礎而言,用着十分清爽,且配合cron表達式用着也十分的強大,幾乎能應對各種任務調度。

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