1. 程式人生 > 其它 >Quartz作業排程實踐

Quartz作業排程實踐

技術標籤:.NETc#

Quartz的使用場景:
例如:每5秒對某個平臺傳輸資料

Quartz框架的一些基礎概念解釋:
Scheduler 作業排程器。
IJob 作業介面,繼承並實現Execute, 編寫執行的具體作業邏輯。
JobBuilder 根據設定,生成一個詳細作業資訊(JobDetail)。
TriggerBuilder 根據規則,生產對應的Trigger
這裡有個注意點Quartz包的版本必須要2.6.2,因為後面的版本以後也就是3開頭的StdSchedulerFactory.GetDefaultScheduler()返回值改了
在這裡插入圖片描述

1.job測試類

    /// <summary>
/// 無參作業 /// </summary> public class Test1Job : IJob { public void Execute(IJobExecutionContext context) { //寫業務程式碼 Console.WriteLine($"{DateTime.Now}{"無參作業執行!"}"); } } public class Test2Job : IJob { /// <summary>
/// 有參作業 /// </summary> /// <param name="context"></param> public void Execute(IJobExecutionContext context) { JobDataMap dataMap = context.JobDetail.JobDataMap; string test = dataMap.GetString("testPara");
Console.WriteLine($"{DateTime.Now}{"有參作業執行,test值:"} {test}"); } }

2.測試程式碼

  			//從工廠中獲取一個排程器例項化
            IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();

            scheduler.Start();        //開啟排程器
            //第一個例子無參作業建立
            //建立一個作業 -WithIdentity的引數(作業名稱,做業組)
            //當你有不同型別的job時可以將相同型別的job放到一個組裡,同一個組裡的job可以使用相同的邏輯來處理
            IJobDetail job1 = JobBuilder.Create<Test1Job>()   //建立一個作業
                .WithIdentity("JobName", "group")
                .Build();
            // Trigger 作為作業的定時管理工具,一個 Trigger 只能對應一個作業例項,而一個作業例項可對應多個Trigger ;
            //建立一個觸發器 -WithIdentity的引數(觸發器名稱,觸發器組)
            ITrigger trigger1 = TriggerBuilder.Create()
                                        .WithIdentity("mytrigger", "group1")
                                        .StartNow()                         //現在開始
                                        .WithSimpleSchedule(x => x          //觸發時間,5秒一次。
                                            .WithIntervalInSeconds(5)
                                            .RepeatForever())               //不間斷重複執行
                                        .Build();


            scheduler.ScheduleJob(job1, trigger1);       //把作業,觸發器加入排程器。

            //有參作業用傳引數UsingJobData
            IJobDetail job2 = JobBuilder.Create<Test2Job>()
                                        .WithIdentity("JobName1", "group")
                                        .UsingJobData("testPara", "有參")
                                        .Build();
            //WithCronSchedule("") 擁有強大的Cron時間表達式,正常情況下WithSimpleSchedule(x) 已經滿足大部分對日期設定的要求了。
            // Cron時間表達式 由7段構成:秒 分 時 日 月 星期 年(可選,一般情況下是沒有這段)
            //https://cron.qqe2.com/    可以線上生成
            ITrigger trigger2 = TriggerBuilder.Create()
                                        .WithIdentity("mytrigger1", "group1")
                                        .StartNow()
                                        .WithCronSchedule("0/5 * * * * ?")     //時間表達式,5秒一次     
                                        .Build();
            scheduler.ScheduleJob(job2, trigger2);
            //scheduler.Shutdown();         //關閉排程器。
            Console.ReadKey();