Quartz-定时任务框架
一、新建.NET Framework 4 控制台应用程序 ConsoleApP40
二、选择ConsoleApP40 右键 管理NuGet程序包(N)... 输入 Quartz(为了测试方便 请选择 2.5.0 版本)
添加QuartZ之后还会多出一个文件,job_scheduling_data_2_0.xsd 如图
第一种方式 硬编码方式设置定时任务
代码如下:
using Quartz.Impl; using Quartz; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApP40 { internal class Program { static void Main(string[] args) { #region 第一种方式 硬编码方式设置定时任务 //第一种方式 硬编码方式设置定时任务 ////可以通过配置来设置间隔时间 ////int a = 10; //IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler(); //scheduler.Start(); //var job = JobBuilder.Create<HelloJob>().Build(); ////可以通过配置来设置间隔时间 ////var trigger = TriggerBuilder.Create().WithSimpleSchedule(m => m.WithIntervalInSeconds(a).RepeatForever()).StartNow().Build(); //var trigger = TriggerBuilder.Create().WithSimpleSchedule(m => m.WithIntervalInSeconds(1).RepeatForever()).StartNow().Build(); //scheduler.ScheduleJob(job, trigger); #endregion ////创建调度器 //ISchedulerFactory factory = new StdSchedulerFactory(); //var scheduler = await factory.GetScheduler(); //await scheduler.Start(); ////创建工作 //var job = JobBuilder.Create<Myjob>().WithIdentity("job1", "group1").Build(); ////创建触发器,设定触发时间,间隔时间,重复频率 //var trigger = TriggerBuilder.Create().WithIdentity("trigger1", "group1").StartNow().WithSimpleSchedule(a => a.WithIntervalInSeconds(5).RepeatForever()).Build(); ////工作和触发器挂在调度器 //await scheduler.ScheduleJob(job, trigger); Console.Read(); } } public class HelloJob : IJob { private string name = string.Empty; public void Execute(IJobExecutionContext context) { Console.WriteLine("Quartz 任务调度执行----当前时间: {0} ", DateTime.Now); } } /// <summary> /// 工作要处理的内容 /// </summary> //public class Myjob : IJob //{ // public virtual Task Execute(IJobExecutionContext context) // { // return Console.Out.WriteLineAsync($"job工作了,{DateTime.Now}"); // } //} }
测试:
第二种方式 job的配置文件配置 Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin 类来处理这个xml文件,同时指定下quartz_jobs.xml的路径,如下所示:使用quartz_jobs.xml 配置文件来创建相关的定时任务需要的参数,在nuget中获取quartz框架的时候,在解决方案中多了一个xsd文件,这个xsd文件是用来写xml时做代码提示用的.
代码如下:
using Quartz.Impl; using Quartz; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApP40 { internal class Program { static void Main(string[] args) { #region 第一种方式 硬编码方式设置定时任务 //第一种方式 硬编码方式设置定时任务 ////可以通过配置来设置间隔时间 ////int a = 10; //IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler(); //scheduler.Start(); //var job = JobBuilder.Create<HelloJob>().Build(); ////可以通过配置来设置间隔时间 ////var trigger = TriggerBuilder.Create().WithSimpleSchedule(m => m.WithIntervalInSeconds(a).RepeatForever()).StartNow().Build(); //var trigger = TriggerBuilder.Create().WithSimpleSchedule(m => m.WithIntervalInSeconds(1).RepeatForever()).StartNow().Build(); //scheduler.ScheduleJob(job, trigger); #endregion #region 第二种方式 job的配置文件配置 Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin 类来处理这个xml文件,同时指定下quartz_jobs.xml的路径,如下所示:使用quartz_jobs.xml 配置文件来创建相关的定时任务需要的参数 //job的配置文件配置 Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin 类来处理这个xml文件,同时指定下quartz_jobs.xml的路径,如下所示:使用quartz_jobs.xml 配置文件来创建相关的定时任务需要的参数 var factory = new StdSchedulerFactory(new System.Collections.Specialized.NameValueCollection() { {"quartz.plugin.xml.fileNames","~/quartz_jobs.xml" }, {"quartz.plugin.xml.type","Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin,Quartz"} }); IScheduler scheduler = factory.GetScheduler(); scheduler.Start(); #endregion ////创建调度器 //ISchedulerFactory factory = new StdSchedulerFactory(); //var scheduler = await factory.GetScheduler(); //await scheduler.Start(); ////创建工作 //var job = JobBuilder.Create<Myjob>().WithIdentity("job1", "group1").Build(); ////创建触发器,设定触发时间,间隔时间,重复频率 //var trigger = TriggerBuilder.Create().WithIdentity("trigger1", "group1").StartNow().WithSimpleSchedule(a => a.WithIntervalInSeconds(5).RepeatForever()).Build(); ////工作和触发器挂在调度器 //await scheduler.ScheduleJob(job, trigger); Console.Read(); } } public class HelloJob : IJob { private string name = string.Empty; public void Execute(IJobExecutionContext context) { Console.WriteLine("Quartz 任务调度执行----当前时间: {0} ", DateTime.Now); } } /// <summary> /// 工作要处理的内容 /// </summary> //public class Myjob : IJob //{ // public virtual Task Execute(IJobExecutionContext context) // { // return Console.Out.WriteLineAsync($"job工作了,{DateTime.Now}"); // } //} }
使用xml配置job和trigger,首先添加quartz_jobs.xml文件,然后选中visual studio中的xml菜单栏,选中“架构”菜单项,如下:
配置一下 quartz_jobs.xml 复制到输出目录 为 始终复制,生成操作 内容即可
注意: 在quartz_jobs.xml中 <job-type>配置的时候,需要设置应用程序的名称以及IJob的实现类
测试:
修改quartz_jobs.xml中 <repeat-interval>10000</repeat-interval>配置为10,如下
龙腾一族至尊龙骑