.Net Core創建QuartZ定時任務

Quartz框架的一些基礎概念解釋:

  Scheduler 作業調度器。

  IJob 作業接口,繼承並實現Execute, 編寫執行的具體作業邏輯。

  JobBuilder 根據設置,生成一個詳細作業信息(JobDetail)。

  TriggerBuilder 根據規則,生產對應的Trigger
時間表達式參考博客:https://www.cnblogs.com/GarfieldTom/p/3746290.html

一、創建項目

二、安裝Quartz插件

三、創建QuartZ作業類

四、創建任務過程

 1、控制檯程序     (Program)

 1 static void Main(string[] args)
 2 {
 3 Console.WriteLine("開始了:Hello Quart");
 4 Console.WriteLine("---------------------------------------------");
 5 QuartzExtensions.QuartzStart("Y").Wait(); 
 6 Console.WriteLine("系統進入Pending狀態。輸入 exit 退出.....");
 7 Console.WriteLine("---------------------------------------------");
 8 while (true)
 9 {
10 if (Console.ReadLine() == "exit")
11 break;
12 }
13 }
View Code

 

2、Quartz擴展創建任務(QuartzExtensions)

 1 using Quartz;
 2 using Quartz.Impl;
 3 using System;
 4 using System.Collections.Specialized;
 5 using System.Threading.Tasks;
 6 
 7 namespace CoreQuartDemo
 8 {
 9 public class QuartzExtensions
10 {
11 /// <summary>
12 /// Quart啓動
13 /// </summary>
14 /// <param name="isImmediately">是否立即執行,此處只用於測試(默認N:否,Y:是)</param>
15 /// <returns></returns>
16 public static async Task QuartzStart(string isImmediately = "N")
17 {
18 try
19 {
20 // 從工廠中獲取調度程序實例
21 NameValueCollection props = new NameValueCollection
22 {
23 { "quartz.serializer.type", "binary" }
24 };
25 StdSchedulerFactory factory = new StdSchedulerFactory(props);
26 IScheduler scheduler = await factory.GetScheduler();
27 // 開啓調度器
28 await scheduler.Start();
29 if (isImmediately == "Y")
30 {
31 /**動態同步信息,每天一次(可以根據自己需求設置時間)**/
32 IJobDetail job2;
33 ITrigger trigger2;
34 int[] len = { 1, 2, 3, 4, 5 };
35 for (int i = 1; i <= len.Length; i++)
36 {
37 string name = Guid.NewGuid().ToString("N") + i;
38 string group = Guid.NewGuid().ToString("N") + "group" + i;
39 //綁定任務
40 job2 = JobBuilder.Create<QuartzJob>()
41 .WithIdentity(name, group)
42 .Build();
43 job2.JobDataMap.Put("param", "自定義執行參數" + i);
44 
45 //創建執行時間
46 trigger2 = TriggerBuilder.Create()
47 .WithIdentity($"" + name + ".trigger", group + "1")
48 .StartNow()
49 .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(DateTime.Now.Hour, DateTime.Now.AddMinutes(i).Minute))//隔幾分鐘執行一次
50 .Build();
51 //創建任務
52 scheduler.ScheduleJob(job2, trigger2).Wait();//作業,觸發器加入調度器。異步執行
53 }
54 }
55 else
56 {
57 /**定時同步信息,每天重複一次,無限循環**/
58 // 定義同步信息工作,並將其綁定到我們的IJob實現類
59 IJobDetail job = JobBuilder.Create<QuartzJob>()
60 .WithIdentity("QuartzJob", "QuartzJobGroup")
61 .Build();
62 job.JobDataMap.Put("param", "定期執行參數1");
63 // 觸發作業
64 ITrigger trigger = TriggerBuilder.Create()
65 .WithIdentity("QuartzJobtRigger", "QuartzJobGroup")
66 .StartNow()
67 .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(11, 9))//24小時制
68 .Build();
69 await scheduler.ScheduleJob(job, trigger);
70 
71 // 定義獲取信息工作,並將其綁定到我們的IJob實現類
72 IJobDetail job1 = JobBuilder.Create<QuartzJob>()
73 .WithIdentity("QuartzJob1", "QuartzJobGroup1")
74 .Build();
75 job.JobDataMap.Put("param", "定期執行參數2");
76 // 觸發作業
77 ITrigger trigger1 = TriggerBuilder.Create()
78 .WithIdentity("QuartzJobtRigger1", "QuartzJobGroup1")
79 .StartNow()
80 .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(11, 10))//24小時制
81 .Build();
82 await scheduler.ScheduleJob(job1, trigger1);
83 }
84 }
85 catch (System.Exception)
86 {
87 
88 throw;
89 }
90 }
91 }
92 }
View Code

 

3、作業接口(QuartzJob)

 1 using Quartz;
 2 using System;
 3 using System.Threading.Tasks;
 4 
 5 namespace CoreQuartDemo
 6 {
 7 /// <summary>
 8 /// 任務類,繼承Quartz中IJob接口,創建任務
 9 /// </summary>
10 public class QuartzJob : IJob
11 {
12 public Task Execute(IJobExecutionContext context)
13 {
14 string param = context.JobDetail.JobDataMap.GetString("param");
15 try
16 {
17 Console.Write("執行時間" + DateTime.Now + "結果:+" + param + "\n");
18 }
19 catch (Exception)
20 {
21 Console.Write("catch異常執行時間" + DateTime.Now + "結果:+" + param + "\n");
22 throw;
23 }
24 
25 return Task.CompletedTask;
26 }
27 }
28 }
View Code

 

定期執行結果:

自定義執行

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