Quartz.Net 学习 (1)

Quartz.Net是一个开源的作业调度框架,是OpenSymphony Quartz API.NET移植版本。

Quartz.Net的官方网址是:http://quartznet.sourceforge.net/

 

下载下来后,可以看到具有源代码,在使用之余可以看看具体实现。

 

概念:

调度(Scheduler):

作业(Job):

触发器(Trigger):

 

 

简单使用:

 

1.首先从下载包中提取出 bin/{.net framework version}/Release/Quartz 文件中的 Common.Logging.dll 和 Quartz.dll

其是 Comm.Logging.Dll是日志管理类。

 

2.把上述两个Dll引用至项目中

 

3.要实现作业调度类必需要实现IJob接口,此接口位于 Quartz 命名空间下面

 

public class MyJob : IJob { #region IJob 成员 public void Execute(JobExecutionContext context) { //在这儿写你的代码 Console.WriteLine("Called"); } #endregion }

 

转到IJob的定义会发现:Instances of this interface must have a public no-argument constructor. Quartz.JobDataMap
provides a mechanism for 'instance member data' that may be required by some
implementations of this interface.

意思是:必需为这个IJob的实现类提供公有的无参构造函数

 

public class MyJobExample { public void Test() { ISchedulerFactory schedulerFactory = new StdSchedulerFactory();//调度工厂 IScheduler scheudler = schedulerFactory.GetScheduler();//得到一个客户端可用的调度实列 JobDetail jobDetail = new JobDetail("Job", "Group", typeof(MyJob));//作业 SimpleTrigger trigger = new SimpleTrigger("Trigger","Group", TriggerUtils.GetEvenMinuteDate(DateTime.UtcNow));//实例化一个简单的触发器,执行时间是当前时间的下一分钟 scheudler.ScheduleJob(jobDetail, trigger);//加入到调度 scheudler.Start();//开始执行调度 } }

 

其中 TriggerUtils类中提供了很多静态方法,以使我们更好的使用Trigger.

如上面的: DateTime TriggerUtils.GetEvenMinuteDate(DateTime? dateUtc);//就是得到给定时间的下一分钟

DateTime TriggerUtils.GetEvenHourDate(DateTime? dateUtc);

DateTime TriggerUtils.GetEvenSecondDate(DateTime? dateUtc);

DateTime TriggerUtils.GetEvenSecondDateBefore(DateTime? dateUtc);

Trigger TriggerUtils.MakeHourlyTrigger();

Trigger TriggerUtils.MakeHourlyTrigger(int intervalInHours);

.........

 

其中 Trigger 中可以指定很多与调度策略相关的参数,如重复执行的次数,重复执行的时间间隔等,通过里面其方法还能得到第一次和最终后一次,以及给定时间的上一次和下一次执行时间(如果有)等等 返回参数一般都为 可空的 DateTime?

 

如常见的:

 

Trigger.RepeatCount = 2;//重复2次,加上第一次执行,总计执行3次,每次执行仍会去实列化MyJob类

Trigger.RepeatInterval = TimeSpan.FromSeconds(3);//如果指定RepeatCount 属性,则此属性不可为00:00:00 

通过里面的方法可以得到作业第一次开始时间,最后时间,以及调用多少次,上一次和下一次的时间等等。

 

最后通过 Schedluer.Start()方法开执行作业调度

 

可以通过Schedluer.Shutdown来关闭作业调度,使用此方法后不能再次开启。

 

Schedluer提供了对作业和触发器以及作业和触发器监听等处理。 

你可能感兴趣的:(Quartz.Net学习记录)