Quartz作業排程實踐
阿新 • • 發佈:2021-01-27
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();