记录一下Quartz使用
Quartz是一款比较好用的定时任务执行工具类,这里就简单说一下用法,至于有何优势或者说需要更深层的挖掘,可能就需要您更多的摸索了。
winfrom程序实现
先说一下思路和流程
- 新建winfrom程序 ,我就命名WindowsFormsApplication1好了
- 程序NuGet引入Quartz类库,两种引入方法:第一种,程序包管理控制台输入Install-Package Quartz;第二种在管理解决方案NuGet程序包中搜索Quartz然后安装。
- 新建一个文件夹Helper,里面新建两个类Class用来配置Quartz, Quartz和IQuartz,下面会讲解,当然,这两个类名和路径都是没规定的,自己喜欢就好。
- 调用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();
}
/// <summary>
/// winfrom程序加载完成触发
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_Load(object sender, EventArgs e)
{
//开始使用Quartz
Helper.Quartz.Start().GetAwaiter().GetResult();
}
public static void test()
{
}
}
}
--------------------------------------------------------------------web MVC程序实现---------------------------------------------------------------------------
## web MVC程序实现
其实和上面winfrom说的基本一样,思路和流程如下
- 新建web MVC程序 ,我就命名WebApplication1
- 程序NuGet引入Quartz类库,两种引入方法:第一种,程序包管理控制台输入Install-Package Quartz;第二种在管理解决方案NuGet程序包中搜索Quartz然后安装。
- 新建两个类Class用来配置Quartz, Quartz和IQuartz,下面会讲解,当然,这两个类名和路径都是没规定的,自己喜欢就好。
- 调用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();
}
/// <summary>
/// 测试用的,固定时间调用
/// </summary>
public static void test()
{
}
}
}