1、简介
本篇为大家介绍使用Quartz.Net实现计划任务的方法,Quartz本身已经拥有了强大的计划功能,但我们可以自定义策略的方式简单实现各种项目所需的自动化任务。
2、开发步骤
下面就以C#开发为例,编写一个简单的计划,主要的开发过程如下:
1、下载Quartz
Quartz.NET 2.2.4 Released
2、编写一个简单的Program程序(用于在每天指定的时间执行特定的任务和自己的项目后台交互,执行查询、根据查询结果进行不同的业务处理、写入日志)
using ClosedAt6.Tasks;
using Common.Logging;
using Quartz;
using Quartz.Impl;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ClosedAt6
{
class Program
{
static void Main(string[] args)
{
ILog log = LogManager.GetLogger(typeof(ClosedAt6Task));
log.Info("------- Initializing -------------------");
// First we must get a reference to a scheduler
ISchedulerFactory sf = new StdSchedulerFactory();
IScheduler sched = sf.GetScheduler();
//---------------------------------------代码添加job和trigger
// 下一次循环的时间点
DateTimeOffset startTime = DateBuilder.TodayAt(18, 0, 0); // 每晚六点
IJobDetail job = JobBuilder.Create<ClosedAt6Task>() // 创建Job
.WithIdentity("6 点后自动申请")
.Build();
ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create() //创建触发器
.WithIdentity("trigger1")
.StartAt(startTime)
.WithSimpleSchedule(x => x.WithIntervalInHours(24).RepeatForever())
.Build();
// 安排任务
DateTimeOffset ft = sched.ScheduleJob(job, trigger);
var loggedinfo = string.Format("{0} will run at: {1} and repeat: {2} times, every {3} seconds", job.Key, ft.DateTime.ToString(), trigger.RepeatCount, trigger.RepeatInterval.TotalSeconds);
Console.WriteLine(loggedinfo);
log.Info(loggedinfo); //写日志
// Start up the scheduler (nothing can actually run until the
// 执行计划
sched.Start();
}
}
}