Quartz.net快速入門

         之前在使用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是很強大的一個任務調度框架,關於更多的使用,我將在後期繼續更新。

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