c# Quartz.net的簡單封裝

分享一個之前封裝的Quartz.net類。ide

新建一個QuartzClass類庫項目。nuget控制檯輸入ui

image.png

 

添加Quartz.net的引用。
咱們新建一個JobBase.cs文件,裏面有一個Run方法。以後全部的Job都需繼承這個基類,並實現Run方法。spa

namespace LY.QuartzClass { public abstract class JobBase { public abstract void Run(); } }

 

以後新增一個JobInstance.cs類。這個類主要實現IJob接口。.net

using Quartz; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace LY.QuartzClass { public class JobInstance : IJob { public void Execute(IJobExecutionContext context) { IDictionary<string, object> jobs = context.JobDetail.JobDataMap; if (jobs != null) { foreach (var item in jobs.Values) { try { JobBase jobObj = item as JobBase; jobObj.Run(); } catch { } } } } } }

 

在JobInstance類的Execute方法中,咱們從JobDataMap中取出JobBase實體,並執行Run方法。code

下面咱們新增一個JobManager.cs類,類內只有一個簡單的AddJob方法blog

using Quartz; using Quartz.Impl; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace LY.QuartzClass { public class JobManage { IScheduler schedudler; public JobManage() { schedudler = StdSchedulerFactory.GetDefaultScheduler(); schedudler.Start(); } public void AddJob<T>(int Second) where T : JobBase { JobBase jbobj = Activator.CreateInstance<T>(); IDictionary<string, object> jbData = new Dictionary<string, object>(); jbData.Add("name", jbobj); IJobDetail job1 = JobBuilder.Create<JobInstance>() .SetJobData(new JobDataMap(jbData)).Build(); ITrigger trigger1 = TriggerBuilder.Create() .StartNow() .WithSimpleSchedule(x => x.WithIntervalInSeconds(Second) .RepeatForever()).Build(); schedudler.ScheduleJob(job1, trigger1); } public void AddJob<T>(string rule) where T : JobBase { JobBase jbInstance = Activator.CreateInstance<T>(); IDictionary<string, object> jbData = new Dictionary<string, object>(); jbData.Add("name", jbInstance); IJobDetail job1 = JobBuilder.Create<JobInstance>() .SetJobData(new JobDataMap(jbData)).Build(); ITrigger trigger1 = TriggerBuilder.Create() .StartNow() .WithCronSchedule(rule).Build(); schedudler.ScheduleJob(job1, trigger1); } } }

 

在AddJob時,將Job傳入JobData中。繼承

下面咱們進行調用Test。
新建一個窗體項目,並添加對LY.QuartzClass項目的引用。
新增三個Job類,繼承自JobBase接口

public class FirstJob : JobBase { public override void Run() { Console.WriteLine(DateTime.Now.ToString()); } }

 

public class SecondJob : JobBase { public override void Run() { Console.WriteLine(DateTime.Now.ToString() + ":Hello"); } }

 

public class ThirdJob : JobBase { public override void Run() { Console.WriteLine(DateTime.Now.ToString() + ":CronTest"); } }

 


在窗體中進行調用get

private void button1_Click(object sender, EventArgs e) { JobManage job = new JobManage(); job.AddJob<FirstJob>(3); job.AddJob<SecondJob>(6); job.AddJob<ThirdJob>("0/5 0-58 9 * * ?"); }

 


結果以下:string

 

 
image.png
相關文章
相關標籤/搜索