NET作業排程(定時任務)-Quartz.Net
一. 背景
工作中我們難免會有這樣一些需求:定時任務,說白了就是在某一時間,讓我們的程式來執行一些工作.
說道這裡,也你會想到windows計劃任務,但在一些時候它並沒有很好的擴充套件性,一些複雜的任務並不能很好的完成,不能滿足的我們的工作需要,我們需要的是一個叢集部署的作業排程框架。
二. Quartz.Net介紹
Quartz.NET是一個開源的作業排程框架,非常適合在平時的工作中,定時輪詢資料庫同步,定時郵件通知,定時處理資料等。 Quartz.NET允許開發人員根據時間間隔(或天)來排程作業。它實現了作業和觸發器的多對多關係,還能把多個作業與不同的觸發器關聯。整合了Quartz.NET的應用程式可以重用來自不同事件的作業,還可以為一個事件組合多個作業.
它一些很好的特性:
1:支援叢集,作業分組,作業遠端管理。
2:自定義精細的時間觸發器,使用簡單,作業和觸發分離。
3:資料庫支援,可以寄宿Windows服務,WebSite,winform等。
三. 實戰
利用nuget來安裝 Quartz.Net
Quartz框架的基礎概念解釋:
Scheduler 作業排程器。
IJob 作業介面,繼承並實現Execute, 編寫執行的具體作業邏輯。
JobBuilder 根據設定,生成一個詳細作業資訊(JobDetail)。
TriggerBuilder 根據規則,生產對應的Trigger
編寫類CronTask.cs 實現IJob,在Execute方法裡編寫要處理的業務邏輯,系統就會按照Quartz的配置,定時處理。
public sealed class CronTask : IJob
{
private static Logger logger = LogManager.GetCurrentClassLogger();
public void Execute(IJobExecutionContext context)
{
//可以通過context物件來獲取傳遞過來的一些資料資料
JobDataMap dataMap = context.MergedJobDataMap;
string tag = dataMap.GetString("tag");
string title = dataMap.GetString("title");
string content = dataMap.GetString("content");
string description = dataMap.GetString("description");
string tels = dataMap.GetString("tels");
//執行定時任務 傳送簡訊
SendMsg(tels,content);
context.Scheduler.Shutdown();
logger.InfoFormat("定時任務測試");
}
//定義任務
public static void SetTask(string tag, string starttime, string title, string content, string description,string tels)
{
try
{
DateTime time = DateTime.Parse(starttime);
//下面用到的執行時間要使用Cron表示式(如:"/5 * * ? * *"),下面我會介紹一下
string cronstr = GetCron(time);
//從工廠中獲取一個排程器例項化
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
scheduler.Start();
var jobData = new JobDataMap();
jobData.Add("tag", tag);
jobData.Add("title", title);
jobData.Add("content", content);
jobData.Add("description", description);
jobData.Add("tels", tels);
IJobDetail job = JobBuilder.Create<CronTask>()
.WithIdentity("job", DateTime.Now.ToLongDateString())
.SetJobData(jobData)
.Build();
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("msmtriger", "group")
.StartNow() //現在開始
.WithCronSchedule(cronstr)
.Build();
// ITrigger trigger2 = TriggerBuilder.Create()
// .WithIdentity("mytrigger", "group1")
// .StartNow()
// .WithCronSchedule("/5 * * ? * *") //時間表示式,5秒一次
// .Build();
scheduler.ScheduleJob(job, trigger);//把作業,觸發器加入排程器。
}
catch (Exception ex)
{
logger.Error(ex);
}
}
public static string GetCron(DateTime dt)
{
string retulut = "";
retulut = string.Format("0,{0} 0,{1} 0,{2} {3} {4} ? {5}", dt.Second, dt.Minute, dt.Hour, dt.Day, dt.Month, dt.Year);
return retulut;
}
}
WithCronSchedule("") 擁有強大的Cron時間表示式,正常情況下WithSimpleSchedule(x) 已經滿足大部分對日期設定的要求了。
上面說道的cron表示式可以參考:
http://www.cnblogs.com/yanweidie/p/3537144.html
裡面的線上地址已經不能用了,我這裡給大家準備了一個:
Quartz Cron表示式線上生成器
相關文章
- Net作業排程(一) -Quartz.Net入門quartz
- Net作業排程(三) — Quartz.Net進階quartz
- 實現Quartz.NET的HTTP作業排程quartzHTTP
- 定時排程系列之Quartz.Net詳解quartz
- 山寨版Quartz.Net任務統一排程框架quartz框架
- Linux 定時任務排程Linux
- Net作業排程(四)—quartz.net持久化和叢集quartz持久化
- laravel框架任務排程(定時執行任務)Laravel框架
- Quartz.net開源作業排程框架使用詳解quartz框架
- Java定時任務排程詳解Java
- Crontab定時任務排程介紹
- Quartz.NET配置檔案:簡便任務排程,輕鬆管理quartz
- Net作業排程(五)—quartz.net動態新增job設計quartz
- Android 中的定時任務排程Android
- Spring排程定時任務的方式Spring
- 使用Java實現定時任務排程Java
- ASP.NET Core託管執行Quartz.NET作業排程詳解ASP.NETquartz
- 十七、.net core(.NET 6)搭建基於Quartz元件的定時排程任務quartz元件
- 利用排程任務定時刪除分割槽
- Quartz.Net 作業排程後臺管理系統,基於ExtjsquartzJS
- 基於Azkaban的任務定時排程實踐
- 3分鐘掌握Quartz.net分散式定時任務的姿勢quartz分散式
- 任務排程
- 用海豚排程器定時排程從Kafka到HDFS的kettle任務指令碼Kafka指令碼
- 『學了就忘』Linux系統定時任務 — 89、任務排程工具anacronLinux
- Laravel 任務排程Laravel
- Airflow 任務排程AI
- 基於Asp.Net Core 5.0依賴Quartz.Net框架編寫的任務排程web管理平臺ASP.NETquartz框架Web
- [原始碼分析] 定時任務排程框架 Quartz 之 故障切換原始碼框架quartz
- 深入 Java Timer 定時任務排程器實現原理Java
- 在Spring中使用JDK定時器實現排程任務SpringJDK定時器
- DolphinScheduler心臟:Quartz的定時任務排程框架深度解析quartz框架
- Spark中資源排程和任務排程Spark
- 分散式任務排程分散式
- Nucleus PLUS任務排程
- linux 任務排程Linux
- Quartz.NET是一個開源的作業排程框架(轉自張善友部落格)quartz框架
- .Net Core 3.1瀏覽器後端服務(五) 引入定時任務Quartz.Net瀏覽器後端quartz