之前在使用Java的時候,寫過Quartz的博客,原文鏈接:https://blog.csdn.net/qq_41061437/article/category/8523862,現在做.net開發的時候,有個任務需要做定時調度作業,於是想到了Quartz,於是搜索了一番,發現Quartz還真遷移到了.net中,至此,我發現Java中很多優秀的框架或者組件都有遷移到.net中。雖然.net中的Quartz與Java中的Quartz相差不大,但爲了學習記錄,這裏還是進行一下記錄。
因爲開發原因,我選擇的是老版本2.5.0,這裏也針對這個版本的使用來記錄。首先就是下載Quartz,通過Nuget安裝即可,選擇2.5.0版本。
我們來看一下里面的主要接口和類:
IScheduler :和調度器交互的主要接口
JobBuilder:定義 JobDetail 實例
IJobDetail:定義 Job 實例及其它相關的靜態信息
IJob:自定義的作業模塊所要繼承的接口,調度器會調用這個實現
TriggerBuilder:定義 Trigger 實例
ITrigger:定義 Job 被觸發的時間
整個創建流程如下:
①創建作業調度器 IScheduler
②啓動調度器
③創建作業IJobDetail
④創建調度器ITrigger
⑤將作業和調度器加入到作業調度器中
代碼實現如下:
static void Main(string[] args)
{
// 創建作業調度器
ISchedulerFactory chedulerFactory = new StdSchedulerFactory();
IScheduler scheduler = chedulerFactory.GetScheduler();
// 啓動調度器
scheduler.Start();
// 創建作業
IJobDetail job = JobBuilder.Create<NewJob>()
.WithIdentity("NewJob", "group")
.Build();
// 創建觸發器,每5s執行一次
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger", "group")
.StartNow() //現在開始
.WithSimpleSchedule(x => x //觸發時間,5秒一次。
.WithIntervalInSeconds(5)
.RepeatForever()) 不間斷執行
.Build();
// 加入到作業調度器中
scheduler.ScheduleJob(job, trigger);
}
//作業
public class NewJob : IJob
{
public async Task Execute(IJobExecutionContext context)
{
Console.WriteLine(DateTime.Now);
}
}
Quartz中有個cron表達式來進行時間的配置,比如某天什麼時候開始執行,再或者每隔多少時間開始執行,再比如每天的什麼時候開始執行,具體cron表達式怎麼配置不做過多介紹,可以看我之前的博客。下面我們修改一下上面的代碼,讓其每天下午六點提醒我們收拾東西,要下班回家了。
static void Main(string[] args)
{
// 創建作業調度器
ISchedulerFactory chedulerFactory = new StdSchedulerFactory();
IScheduler scheduler = chedulerFactory.GetScheduler();
// 啓動調度器
scheduler.Start();
// 創建作業
IJobDetail job = JobBuilder.Create<NewJob>()
.WithIdentity("NewJob", "group")
.Build();
// 創建觸發器,每天18:00執行一次
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger", "group")
.StartNow() //現在開始
.WithCronSchedule("0 0 18 * * ? *")
.Build();
// 加入到作業調度器中
scheduler.ScheduleJob(job, trigger);
}
//作業
public class NewJob : IJob
{
public async Task Execute(IJobExecutionContext context)
{
Console.WriteLine("不要摸魚了,收拾東西,下班回家了!");
}
}
當然,Quartz是很強大的一個任務調度框架,關於更多的使用,我將在後期繼續更新。