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

     

     

  • 相关阅读:
    Vim命令合集
    感知机算法
    【项目】搜索广告CTR预估(二)
    【项目】搜索广告CTR预估(一)
    Kernel Logestic Regression
    SVM3 Soft Margin SVM
    Bias and Variance
    SVM2---核函数的引入
    贪心题目汇总
    Divergent series
  • 原文地址:https://www.cnblogs.com/1175429393wljblog/p/16870212.html
Copyright © 2020-2023  润新知