在之前的文章《推薦一個簡單、輕量、功能非常強大的C#/ASP.NET定時任務執行管理器組件–FluentScheduler》和《簡單、輕量、功能非常強大的C#/ASP.NET定時調度任務執行管理組件–FluentScheduler之實例篇》中,我們認識和了解了FluentScheduler這款輕量的定時任務調度執行組件。今天再給大家介紹一款關於定時任務調度執行的組件–Quartz.Net,Quartz.Net是Java版Quartz的.NET實現。
相對FluentScheduler實現定時調度任務的使用簡單,配置少的特點,Quartz.Net則配置稍微復雜一些。下面我們就接合一個 ASP.NET MVC網站應用程序的定時執行任務調試的小實例來了解Quartz.Net的簡單用法,當然Webform的Web應用也是可以使用Quartz.Net 來作定時任務的。
首先,我們打開Visual Studio 2015,創建一個ASP.NET MVC的Web應用程序項目,命名為QuartzNetMvcDemo:
然后通過程序包管理器控制台來安裝Quartz.Net組件:Install-Package Quartz
Quartz.Net一個最簡單任務至少包括三部分實現:job(作業),trigger(觸發器)以及scheduler(調度器)。其中job 是你需要在一個定時任務中具體執行的業務邏輯,trigger則規定job何時並按照何種規則執行,最終job和trigger會被注冊到 scheduler(調度器)中,scheduler負責協調job和trigger的運行。
在Quartz.Net中,一個job(作業)即為一個類,為了讓job能在Quartz.Net的體系中執行,我們必須實現Quartz.Net提供的IJob接口的Execute方法,如本例所實現的IJob接口ReportJob類:
代碼入下:
Execute方法有一個IJobExecutionContext的接口對象作為參數,這個參數包含了定義這個類的job(作業)的配置信息。當然,作為示例,在本例中,我們沒有使用到這個參數。
接下來,我們需要實現一個trigge(觸發器),示例代碼如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
using
Quartz;
using
Quartz.Impl;
namespace
QuartzNetMvcDemo
{
public
class
ReportJobScheduler
{
public
static
void
Start()
{
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
scheduler.Start();
IJobDetail job = JobBuilder.Create<ReportJob>().Build();
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity(
"triggerName"
,
"groupName"
)
.WithSimpleSchedule(t =>
t.WithIntervalInSeconds(5)
.RepeatForever())
.Build();
scheduler.ScheduleJob(job, trigger);
}
}
}
|
這個代碼片段你可以放在你項目程序的任何可以被調用的地方,類名你也可以隨意取,這沒有什么關系的。只要在使用這個類時正確引用即可。
在代碼中,我們使用StdSchedulerFactory.GetDefaultScheduler()創建了一個scheduler(調度器) 並隨之 啟動了這個調度器,然后創建了一個簡單的Quartz.Net觸發器並對這個觸發器進行了一些配置:指定了觸發器的名稱為triggerName,觸發器 的分組為groupName,指定每5秒觸發一次並一直循環觸發。最后通過scheduler.ScheduleJob()方法把job(作業)和 trigger(觸發器)注冊到了調度器中,這樣一個完整的定時任務就定制完成了。
最后,我們還要做的一件事情就是啟動我們定制好的定時任務,我們把這個任務放到項目程序的全局cs文件(Global.asax)的Application_Start方法中來執行:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
using
System.Web.Mvc;
using
System.Web.Optimization;
using
System.Web.Routing;
namespace
QuartzNetMvcDemo
{
public
class
MvcApplication : System.Web.HttpApplication
{
protected
void
Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
//啟動定時任務
ReportJobScheduler.Start();
}
}
}
|
好了,現在所有的操作都已完成,按下F5運行我們的ASP.NET MVC定時任務調度執行示例程序。過一分鍾去打開我們的日志文件,如果程序正常運行,那么你將看到如下的日志
怎么樣,Quartz.Net實現的定時執行任務調度是不是也比較簡單呢?當然,這只是Quartz.Net的簡單示例,Quartz.Net還有許多更高級的功能,如支持配置文件的作業調度,支持cron的作業周期等