前段時間開發個項目需要自定義時間定時發送郵件,此處使用了Quartz 定時任務,在此記錄下:
/// <summary> /// 創建定時任務 /// </summary> /// <param name="checkData">報告生成時間</param> /// <param name="timer">報告發送使勁</param> public void CreateTimingJob(DateTime checkData, DateTime timer) { ISchedulerFactory sf = new StdSchedulerFactory(); IScheduler scheduler = sf.GetScheduler();//創建調度實例 //job 名稱 命名規則:JobSendEmailTimer+ 報告生成時間 string JobName = "JobSendEmailTimer" + checkData.ToShortDateString().ToString(); //創建任務實例 IJobDetail job = JobBuilder.Create<SendEmailJob>().WithIdentity(JobName, "JobSendEmailTimer"). UsingJobData("reportGenerationDate", checkData.ToShortDateString()) //傳參 .Build(); var seconds=timer.Second; var minutes = timer.Minute; var hours = timer.Hour; var day = timer.Day; var month = timer.Month; var year = timer.Year; var timerSetting = seconds + " " + minutes + " " + hours + " " + day + " " + month + " " + "? " + year; // 0 0 0 0 0 0 0 秒 分 時 日 月 周 年 ITrigger trigger = TriggerBuilder.Create().StartAt(DateTime.Now.AddSeconds(0)).WithCronSchedule(timerSetting).Build(); scheduler.ScheduleJob(job,trigger); scheduler.Start(); }
public class SendEmailJob:IJob { public void Execute(IJobExecutionContext context) { //獲取傳入的參數數據 string data = context.MergedJobDataMap.GetString("reportGenerationDate"); ReportController reportController = new ReportController(); reportController.SendEmailTimer(data); } }
//刪除定時任務 public ApiResult<string> Delete(int id) { if (id > 0) { var result = DeleteEntity(id); //在這里獲取數據庫定時任務配置記錄 var sql = $@"select * from TimerConfig s where s.Id={id}"; var timerResult= DbHelper.GetModel<TimerConfig>(sql); if (timerResult != null) { //job 命名規則 var JobName = "JobSendEmailTimer"+timerResult.ReportGeneratedDate.ToShortDateString().ToString();// TriggerKey triggerKey = new TriggerKey(JobName, "JobSendEmailTimer"); ISchedulerFactory sf = new StdSchedulerFactory(); IScheduler scheduler = sf.GetScheduler(); scheduler.PauseTrigger(triggerKey);//停止觸發器 scheduler.UnscheduleJob(triggerKey);//移除觸發器 scheduler.DeleteJob(new JobKey(JobName, "JobSendEmailTimer"));//刪除任務 } return result; } return ApiResult<string>.Failed("刪除失敗!"); }