任務調度框架 Quartz.Net


一:簡介

Quartz.NET是一個開源的作業調度框架,非常適合在平時的工作中,定時輪詢數據庫同步,定時郵件通知,定時處理數據等。 Quartz.NET允許開發人員根據時間間隔(或天)來調度作業。它實現了作業和觸發器的多對多關系,還能把多個作業與不同的觸發器關聯。整合了 Quartz.NET的應用程序可以重用來自不同事件的作業,還可以為一個事件組合多個作業。

二:參考

官方學習文檔:http://www.quartz-scheduler.net/documentation/index.html

官方的源代碼下載:http://sourceforge.net/projects/quartznet/files/quartznet

MVC中使用任務調度框架:http://www.cnblogs.com/best/p/7658573.html

三:安裝的類庫文件

Common.Logging.Core.dll

Common.Logging.dll

Quartz.dll

四:使用實例

①建一個普通的控制台項目

②添加一個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>
    <!--定義示例任務1 Job-->
    <job>
      <name>UseJob</name>  //任務名稱,必須填寫,並且和任務的類名一樣
      <group>UseJobGroup</group> //(選填) 任務所屬分組
      <description>TestUseQuratJob</description>
      <job-type>TestUseQurat.UseJob,TestUseQurat</job-type> //(必填) 任務類型,任務的具體類型及所屬程序集,格式:實現了IJob接口的包含完整命名空間的類名,程序集名稱
      <durable>true</durable>//(選填) 具體作用不知,官方示例中默認為true
      <recover>false</recover>//(選填) 具體作用不知,官方示例中默認為false
    </job>


    <!--定義示例任務1 觸發器 每1秒執行一次DemoJob1任務-->
    <trigger>
      <cron>
        <name>UseJobTrigger</name>//(必填) 觸發器名稱,同一個分組中的名稱必須不同
        <group>UseJobTriggerGroup</group>//(選填) 觸發器組
        <job-name>UseJob</job-name>//(必填) 要調度的任務名稱,該job-name必須和對應job節點中的name完全相同
        <job-group>UseJobGroup</job-group>//(選填) 調度任務(job)所屬分組,該值必須和job中的group完全相同
        <cron-expression>0/1 * * * * ?</cron-expression>
      </cron>
    </trigger>
  </schedule>
</job-scheduling-data>

Cron表達式范例:


     每隔5秒執行一次:*/5 * * * * ?

     每隔1分鍾執行一次:0 */1 * * * ?

     每天23點執行一次:0 0 23 * * ?

     每天凌晨1點執行一次:0 0 1 * * ?

     每月1號凌晨1點執行一次:0 0 1 1 * ?

     每月最后一天23點執行一次:0 0 23 L * ?

     每周星期天凌晨1點實行一次:0 0 1 ? * L

     在26分、29分、33分執行一次:0 26,29,33 * * * ?

     每天的0點、13點、18點、21點都執行一次:0 0 0,13,18,21 * * ? 

 

④添加一個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

#--------------------------------*************plugin配置------------------------------------
# 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

⑤實現方法類

    public class UseJob : IJob
    {
        public void Execute(IJobExecutionContext context)
        {
            Action a = () =>
            {
                var path = @"C:\Users\pc-1\Desktop\time.txt";
                var str = $"任務器執行啦,當前時間{DateTime.Now}!";
                File.AppendAllText(path, str);
            };
            a.BeginInvoke(null, null);

        }
    }

⑥執行方法

    class Program
    {
        static void Main(string[] args)
        {
控制台執行:
#region 方法一
//不需要添加quartz.config文件 //XMLSchedulingDataProcessor processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper()); //ISchedulerFactory sf = new StdSchedulerFactory(); //IScheduler scheduler = sf.GetScheduler(); //Stream s = new StreamReader("../../quartz_jobs.xml").BaseStream; //processor.ProcessStream(s, null); //processor.ScheduleJobs(scheduler); //scheduler.Start(); #endregion 控制台執行: #region 方法二 //ISchedulerFactory sf = new StdSchedulerFactory(); //IScheduler sched = sf.GetScheduler(); //sched.Start(); #endregion if (!Environment.UserInteractive) { //windos服務執行 ServiceBase.Run(new TestUseService()); } else { //控制台執行 ISchedulerFactory sf = new StdSchedulerFactory(); IScheduler sched = sf.GetScheduler(); sched.Start(); }
}
}

⑦執行結果
任務器執行啦,當前時間2016/10/11 17:36:44!
任務器執行啦,當前時間2016/10/11 17:36:45!
任務器執行啦,當前時間2016/10/11 17:36:46!
任務器執行啦,當前時間2016/10/11 17:36:47!
任務器執行啦,當前時間2016/10/11 17:36:48!
任務器執行啦,當前時間2016/10/11 17:36:49!
任務器執行啦,當前時間2016/10/11 17:36:50!
任務器執行啦,當前時間2016/10/11 17:36:51!

 

 

 

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM