在項目中我們經常遇到與時間結合的無限或者有限輪回的任務。例如每月一號統計工作量,基本這種情況,都會是設置定時任務,定時執行。好了,下面就記錄一下定時任務的開發吧。
首先描述一下開發思路:
建立一個winform控制台程序,手動觸發定時任務的開始,然后執行。項目中需要引用的dll:


好了,開始上代碼:
public class QuartRunner
{
///
/// 調度器工廠
///
ISchedulerFactory factory;
///
/// 調度器
///
public static IScheduler scheduler;
///
/// 輸出任務情況
///
public static Form1 msgInfos = new Form1();
#region 方法
public QuartRunner(Form1 from)
{
from = msgInfos;
}
///
/// 定時任務開啟
///
public void Start()
{
factory = new StdSchedulerFactory();
scheduler = factory.GetScheduler();
Rank("0 25 13 ? * *");
LookContractLog(1);
}
//指定時間點觸發任務
public void Rank(string cronExpression)
{
IJobDetail job = JobBuilder.Create().Build();
ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
.WithCronSchedule(cronExpression)
.Build();
scheduler.ScheduleJob(job, trigger);
scheduler.Start();
}
//每幾分鍾跑一次服務
public void LookContractLog(int minutes)
{
IJobDetail job = JobBuilder.Create().Build();
ITrigger trigger = TriggerBuilder.Create()
.StartNow()
.WithSimpleSchedule(x => x.WithIntervalInMinutes(minutes).RepeatForever())
.Build();
scheduler.ScheduleJob(job, trigger);
scheduler.Start();
}
#endregion
#region 定時任務參考參數
/***定點任務執行
* 0 0 12 * * ? 每天12點觸發
0 15 10 ? * * 每天10點15分觸發
0 15 10 * * ? 每天10點15分觸發
0 15 10 * * ? * 每天10點15分觸發
0 15 10 * * ? 2005 2005年每天10點15分觸發
0 * 14 * * ? 每天下午的 2點到2點59分每分觸發
0 0/5 14 * * ? 每天下午的 2點到2點59分(整點開始,每隔5分觸發)
0 0/5 14,18 * * ? 每天下午的 2點到2點59分(整點開始,每隔5分觸發) 每天下午的 18點到18點59分(整點開始,每隔5分觸發)
0 0-5 14 * * ? 每天下午的 2點到2點05分每分觸發
0 10,44 14 ? 3 WED 3月分每周三下午的 2點10分和2點44分觸發 (特殊情況,在一個時間設置里,執行兩次或兩次以上的情況)
0 59 2 ? * FRI 每周5凌晨2點59分觸發;
0 15 10 ? * MON-FRI 從周一到周五每天上午的10點15分觸發
0 15 10 15 * ? 每月15號上午10點15分觸發
0 15 10 L * ? 每月最后一天的10點15分觸發
0 15 10 ? * 6L 每月最后一周的星期五的10點15分觸發
0 15 10 ? * 6L 2002-2005 從2002年到2005年每月最后一周的星期五的10點15分觸發
0 15 10 ? * 6#3 每月的第三周的星期五開始觸發
0 0 12 1/5 * ? 每月的第一個中午開始每隔5天觸發一次
0 11 11 11 11 ? 每年的11月11號 11點11分觸發(光棍節)
**/
#endregion
}
上面的兩個細節類(RankQuartz,LookContractQuartz),下面展示一個代碼:主要是繼承IJob類,並且重寫方法Execute
public class RankQuartz : IJob
{
public RankQuartz()
{
}
public void Execute(IJobExecutionContext context)
{
try
{
//具體細節的處理
}
catch (Exception ex)
{
_Logger.Logger_Info($"{DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")}:執行排行活動任務時,出現問題:{ex.Message} ");
}
}
}
想要調用,就直接實例化QuartRunner類就可以了
以上,over,以后爭取用一下網上的統一管理定時任務的源碼,學習一下。
