ASP.NET MVC5+EF6+EasyUI 後臺管理系統(84)-Quartz 作業調度用法詳解一

系列目錄

前言

我從Quartz2.0開始使用,並對其進行了封裝了界面,可以參考 http://www.cnblogs.com/ymnets/p/5065154.html

最近拿出來進行了優化,並升級到最新版,溫故而知新嘛

當初教程較少,並且是英文,現在很多地方都有中文的教程也是學習起來事半功倍

Quartz能實現什麼?

他類似於SQL Server的代理與Timer定時器:

1.指定時間執行一條SQL語句或存儲過程

2.指定時間發送郵件(執行一個C#方法)

3.有規律的定時執行想要做的事情(通過配置Cron表達式來實現),如:每個星期1,3,5給用戶發送一條短信

4.作業任務他可以被暫停,掛起,停止

5.作業任務可以遠程被操作管理,數據庫保存(支持多種數據庫包括:SqlServer,Sqlite,Oracle,Mysql,Firebird)

使用方法

從Nuget包直接安裝即可

PM>Install-Package Quartz 

簡單的實現

我們新建一個控制檯程序,並安裝Quartz包

入口代碼:

using Quartz;
using Quartz.Impl;
using System;

namespace QuartzTest
{
    class Program
    {
        static void Main(string[] args)
        {
            // First we must get a reference to a scheduler
            ISchedulerFactory sf = new StdSchedulerFactory();
            IScheduler sched = sf.GetScheduler();
            IJobDetail job = JobBuilder.Create<HelloJob>()
              .WithIdentity("job1", "group21")
              .Build();

            //什麼時候開始執行
            DateTime runTime = DateTime.Now;
            ITrigger trigger = TriggerBuilder.Create()
            .WithIdentity("trigger1", "group1")
            .StartAt(runTime)
            .WithSimpleSchedule(x => x         
            .WithIntervalInSeconds(1) //1秒一次真男人
            .RepeatForever())//無限循環
            .Build();

            sched.ScheduleJob(job, trigger);
            //啓動任務
            sched.Start();
           
        }
    }
}
using Quartz;
using System;
using System.Threading.Tasks;
namespace QuartzTest
{
    /// <summary>
    /// This is just a simple job that says "Hello" to the world.
    /// </summary>
    /// <author>Bill Kratzer</author>
    /// <author>Marko Lahma (.NET)</author>
    public class HelloJob : IJob
    {
        /// <summary> 
        /// Called by the <see cref="IScheduler" /> when a
        /// <see cref="ITrigger" /> fires that is associated with
        /// the <see cref="IJob" />.
        /// </summary>
        public  void Execute(IJobExecutionContext context)
        {
            Console.WriteLine("Hello Quartz");
            // Say Hello to the World and display the date/time
        }
    }
}

運行結果:

您也可以用表達式的形式來運行:

            ITrigger trigger2 = TriggerBuilder.Create()
                                       .WithIdentity("trigger2", "group1")
                                       .StartAt(runTime)
                                       .WithCronSchedule("/1 * * ? * *")    //時間表達式,1秒一次     
                                       .Build();
            sched.ScheduleJob(job, trigger2);

效果也是一樣的!

下面我們來看一個類圖:

這個類圖描述了,Quartz運行的基本原理

如何學習其表達式

我們無需要刻意去背誦他表達式的含義http://cron.qqe2.com/ 界面展示的配置

可以通過界面的操作來看到生成表達式,使用幾次就很少明白。

後臺封裝成界面,更加無需要去記得表達式,通過界面的配置即可

當然你需要知道字符代表的意思,如:*,?等符號,跟通配符有點類似,可以百度

注:實際上我們後面要做的功能也是基於這種界面,然後手選後將生成的表達式作爲運行的定時器而已

總結

Quartz比Timer定時器好用多了,定時器還要部署windows任務

1.HelloJob集成了類圖中所示的IJob接口並實現了void Execute(IJobExecutionContext context);方法,這是必須的!

2.由StdSchedulerFactory.GetDefaultScheduler();來獲得一個調度器

3.把任務加入到觸發器

4.開啓任務,自動跑起來

官方鏈接:

Quartz.Net官方2.X教程  http://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/index.html

Quartz.Net源代碼  https://github.com/quartznet/quartznet

文章代碼:

鏈接:http://pan.baidu.com/s/1pKP6c2Z 密碼:dudi

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