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,如下

 

 

 

 

posted @ 2022-11-08 17:03  龙骑科技  阅读(313)  评论(0编辑  收藏  举报