首页 > 其他分享 >Quartz-定时任务框架

Quartz-定时任务框架

时间:2022-11-08 17:15:20浏览次数:44  
标签:xml Quartz 框架 job quartz scheduler using 定时

一、新建.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,如下

 

 

 

 

标签:xml,Quartz,框架,job,quartz,scheduler,using,定时
From: https://www.cnblogs.com/1175429393wljblog/p/16870212.html

相关文章

  • Java之定时任务的编写
    Java要自动生成工单,需要编写定时任务。可新建一个类:task/ScheduledTasks。代码示例如下:packagecom.cmit.kapok.system.task;importcom.cmit.kapok.constants.BusiC......
  • Flask框架:运用Ajax轮询动态绘图
    Ajax是异步JavaScript和XML可用于前后端交互,在之前《Flask框架:运用Ajax实现数据交互》简单实现了前后端交互,本章将通过Ajax轮询获取后端的数据,前台使用echart绘图库进行图......
  • Flask框架:运用Ajax轮询动态绘图
    Ajax是异步JavaScript和XML可用于前后端交互,在之前《Flask框架:运用Ajax实现数据交互》简单实现了前后端交互,本章将通过Ajax轮询获取后端的数据,前台使用echart绘图库进行图......
  • 1.0 新建VSTO项目 并使用Excel880VSTO框架改善编程体验
    小目标:VSTO新建Excel插件项目,并使用VSTO880框架改善编码体验如何创建全新的VSTO插件项目注意项目目录尽量保持和我的教程目录一致设置在D:\VSTO880\Project注意框架版......
  • 支持JDK19虚拟线程的web框架,之三:观察运行中的虚拟线程
    欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos《支持JDK19虚拟线程的web框架》系列文章链接支持JDK19虚拟线......
  • wdf框架之WdfVersionBind函数分析(2)
    接​​前篇​​,这篇一起来看下WdfVersionBind函数的第4个参数:WdfDriverGlobals。经过前面一番波折,WdfVersionBind总算找到了Wdf01000.sys!_WDF_LIBRARY_INFO结构。接下去,它......
  • Wdf框架:FxDriverEntry----驱动程序的入口函数
      在前面的文章<Wdf框架中WdfDriverGlobals对象的创建>中简单的提到过WdfVersionBind函数的作用,但是没有来得及分析这个函数的调用处。今天得空,借这篇文章写下WdfVersio......
  • Wdf框架中WdfDriverGlobals对象的创建
      前面写过一篇<WDF基本对象和句柄定义>,反响一般,不过这不会成为阻挡我继续写下去的绊脚石~本篇我们继续来分析Wdf框架。   WdfDriverGlobals对象的身影活跃在wdf框......
  • 对<源码级调试WDF框架>一文进行补充
    MS曾在他的Github站点上提出过​​《源码级调试WDF框架》​​的方法,文中提到通过.srcfix命令使windbg源码服务器路径指向MS的源码服务器。这样当调试到wdf框架代码时,windbg......
  • Wdf框架之WdfObject状态机(2) 一文再补充
      万万没想到<Wdf框架之WdfObject状态机(2)>的内容如此之多,2篇博客的篇幅还不够承载,需要第三篇来完成最后一击。本文将进入FxObject::DeleteWorkerAndUnlock的else分支......