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,如下
龙腾一族至尊龙骑
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)