在许多应用场景下我们都希望定时执行一些事务,比较常见的是维护数据库:定时生成汇总数据,定时复制插入数据等。其他特定场景下都存在这些定时任务。如果涉及数据库维护的定时任务,我们尚可以使用数据库自带的数据库代理来实现定时批处理。面对其他类型的定时任务,往往只能通过在服务器上编写windows进程等手段来简介实现。上述这些方法存在下列缺点:
1.需要学习特定的语言或API
使用SQLServer代理服务来实现定时批处理,需要编写较为复杂的SQL语句。对于许多人来说是一个不小的挑战。如果开发团队中有DBA的另说。但一般小型团队都是身兼数职,不太可能有专业DBA去做维护。编写windows服务也需要学习特定的API。
2.与运行环境发生了紧耦合
在大多数情况下,我们不希望应用程序与运行环境发生太多的耦合。特别是很多时候我们对web服务器并没有足够的权限。或者web服务器并不是IIS,而是某个虚拟环境云平台之类,根本就不存在windows服务。这在迁移的时候就会出现很大问题。
Quartz.net就是用来解决这些问题的。它是基于.NET框架的。我们不需要编写任何非托管代码。而且整个API和C#语言是紧密集成的,使用了C#中的一些新特性如Lambda表达式,流式API等。使用简单,功能异常强大。我们可以用C#代码来编写各种定时任务,简单方便。足以满足一般的常见任务。是小型团队杀人越货之利器。当然如果您人多,预算也多,请出门左拐不送。
Quartz.net框架包含三个基本部分:调度器、任务和触发器。
代码如下备查:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Quartz;
using Quartz.Core;
using Quartz.Impl;
using Common.Logging;
using Common.Logging.Factory;
using Common.Logging.Configuration;
namespace QuartzStudy
{
class Program
{
static void Main(string[] args)
{
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
scheduler.Start();
IJobDetail job1 = JobBuilder.Create<HelloJob>() //创建一个作业
.Build();
ITrigger trigger1 = TriggerBuilder.Create()
.WithIdentity("触发器名称", "触发器组")
.StartNow() //现在开始
.WithSimpleSchedule(x => x //触发时间,5秒一次。
.WithIntervalInSeconds(5)
.RepeatForever()) //不间断重复执行
.Build();
scheduler.ScheduleJob(job1, trigger1); //把作业,触发器加入调度器。
}
}
public class HelloJob : IJob
{
public void Execute(IJobExecutionContext context)
{
Console.WriteLine("作业执行!");
}
}
}