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

系列目錄

前言

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

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

當初教程較少,而且是英文,如今不少地方都有中文的教程也是學習起來事半功倍github

Quartz能實現什麼?

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

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

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

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

4.做業任務他能夠被暫停,掛起,中止優化

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

使用方法

從Nuget包直接安裝便可spa

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

相關文章
相關標籤/搜索