c# Quartz使用

记录一下Quartz使用

Quartz是一款比较好用的定时任务执行工具类,这里就简单说一下用法,至于有何优势或者说需要更深层的挖掘,可能就需要您更多的摸索了。

winfrom程序实现

先说一下思路和流程
  1. 新建winfrom程序 ,我就命名WindowsFormsApplication1好了
  2. 程序NuGet引入Quartz类库,两种引入方法:第一种,程序包管理控制台输入Install-Package Quartz;第二种在管理解决方案NuGet程序包中搜索Quartz然后安装。
  3. 新建一个文件夹Helper,里面新建两个类Class用来配置Quartz, Quartz和IQuartz,下面会讲解,当然,这两个类名和路径都是没规定的,自己喜欢就好。
  4. 调用Quartz类(第3点新建的Class),完成。

    开始实现……

第1、2点很简单就不说了,第二点的两个类我就放在一个新建的Helper文件夹下,注意一点就是时间的设定,这个可以根据需求去设置,时间设置在Quartz类的WithCronSchedule中设定,代码实现如下:

using Quartz;
using Quartz.Impl;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WindowsFormsApplication1.Helper
{
    public class Quartz
    {
        public static async Task Start()
        {
            try
            {
                // Grab the Scheduler instance from the Factory
                NameValueCollection props = new NameValueCollection
                {
                    { "quartz.serializer.type", "binary" }
                };
                StdSchedulerFactory factory = new StdSchedulerFactory(props);
                IScheduler scheduler = await factory.GetScheduler();
                await scheduler.Start();
                IJobDetail tfAlarmJob = JobBuilder.Create<IQuartz>()
                    .WithIdentity("tfAlarmJob", "group1")
                    .Build();
                ITrigger trigger = TriggerBuilder.Create()
                    .WithIdentity("trigger", "group1")
                 .WithCronSchedule("0 10 20 ? * FRI")//每周五晚上10点10分运行
                     .Build();
                await scheduler.ScheduleJob(tfAlarmJob, trigger);
            }
            catch (Exception ex)
            {

            }
        }
        public interface IJob
        {
        }
    }
}

using Quartz;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WindowsFormsApplication1.Helper
{
    [DisallowConcurrentExecution]
    public class IQuartz : IJob
    {
        public Task Execute(IJobExecutionContext context)
        {
            return Task.Run(() =>
            {
                try
                {
                //每周五晚上10点运行Form1.test这个方法
                    Form1.test();
                }
                catch (Exception ex)
                {

                }
            });
        }
    }
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        /// 
        /// winfrom程序加载完成触发
        /// 
        /// 
        /// 
        private void Form1_Load(object sender, EventArgs e)
        {
            //开始使用Quartz
            Helper.Quartz.Start().GetAwaiter().GetResult();
        }
        public static void test()
        {

        }
    }
}

--------------------------------------------------------------------web MVC程序实现---------------------------------------------------------------------------

## web MVC程序实现

 其实和上面winfrom说的基本一样,思路和流程如下
  1. 新建web MVC程序 ,我就命名WebApplication1
  2. 程序NuGet引入Quartz类库,两种引入方法:第一种,程序包管理控制台输入Install-Package Quartz;第二种在管理解决方案NuGet程序包中搜索Quartz然后安装。
  3. 新建两个类Class用来配置Quartz, Quartz和IQuartz,下面会讲解,当然,这两个类名和路径都是没规定的,自己喜欢就好。
  4. 调用Quartz类(第3点新建的Class),完成。

    开始实现……

第1、2点很简单就不说了,第二点的两个类我就放在一个新建的Helper文件夹下,注意一点就是时间的设定,这个可以根据需求去设置,时间设置在Quartz类的WithCronSchedule中设定,代码实现如下:

using Quartz;
using Quartz.Impl;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Threading.Tasks;
using System.Web;

namespace WebApplication1.Helper
{
    public class Quartz
    {
        public static async Task Start()
        {
            try
            {
                // Grab the Scheduler instance from the Factory
                NameValueCollection props = new NameValueCollection
                {
                    { "quartz.serializer.type", "binary" }
                };
                StdSchedulerFactory factory = new StdSchedulerFactory(props);
                IScheduler scheduler = await factory.GetScheduler();
                await scheduler.Start();
                IJobDetail tfAlarmJob = JobBuilder.Create<IQuartz>()
                    .WithIdentity("tfAlarmJob", "group1")
                    .Build();
                ITrigger trigger = TriggerBuilder.Create()
                    .WithIdentity("trigger", "group1")
                 .WithCronSchedule("0 10 20 ? * FRI")//每周五晚上10点10分运行
                     .Build();
                await scheduler.ScheduleJob(tfAlarmJob, trigger);
            }
            catch (Exception ex)
            {

            }
        }
        public interface IJob
        {
        }
    }
}
using Quartz;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
using WebApplication1.Controllers;

namespace WebApplication1.Helper
{
    [DisallowConcurrentExecution]
    public class IQuartz : IJob
    {
        public Task Execute(IJobExecutionContext context)
        {
            return Task.Run(() =>
            {
                try
                {
                    //设定的时间执行这个方法
                    HomeController.test();
                }
                catch (Exception ex)
                {

                }
            });
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace WebApplication1.Controllers
{
    public class HomeController : Controller
    {
        public  ActionResult Index()
        {
            //开始使用Quartz
            Helper.Quartz.Start().GetAwaiter().GetResult();
            return View();
        }

        public ActionResult About()
        {
            ViewBag.Message = "Your application description page.";

            return View();
        }

        public ActionResult Contact()
        {
            ViewBag.Message = "Your contact page.";

            return View();
        }
        /// 
        /// 测试用的,固定时间调用
        /// 
        public static void test()
        {
           
        }
    }
}

你可能感兴趣的:(c#)