概述
Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。
第一个实例
Quartz.NET是通过调用器(scheduler)来调用作业的,调用器在使用前首先要实例化它,实例化是使用SchedulerFactory可以完成scheduler的实例化。用户可直接地实例化这个工厂类并且直接使用工厂的实例(例如下面的例子)。
Dim sf As ISchedulerFactory
sf = New StdSchedulerFactory()
Dim sched As IScheduler
sched = sf.GetScheduler()
一旦一个scheduler被实例化,它就可以被启动(start),并且处于驻留模式,直到被关闭(shutdown)。注意,一旦scheduler被关闭(shutdown),则它不能再重新启动,除非重新实例化它。除非scheduler 被启动或者不处于暂停状态,否则触发器不会被触发(任务也不能被执行)。
相信大家对上面的代码能看懂,不再废话,继续
下面我们开始写作业类,代码如下:
Imports Quartz
Imports log4net
Public Class helloJob
Implements IJob
Dim log As ILog
Public Sub New()
'创建日志记录组件实例 (log4net很不错的日志组件)
log = log4net.LogManager.GetLogger("王百锋")
End Sub
'接口函数的实现
Public Sub Execute(ByVal context As Quartz.IJobExecutionContext) Implements Quartz.IJob.Execute
log.Info("test:" + System.DateTime.Now.ToString())
End Sub
End Class
非常简单。下面讲作业应该如何调度、开始、执行、关闭。先上代码:
Imports Quartz.Impl
Imports Quartz
Imports log4net
Imports System.Threading
Public Class test7
Inherits System.Web.UI.Page
Dim log As ILog
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
log = log4net.LogManager.GetLogger("Donglisoft.com Test")
Dim sf As ISchedulerFactory
sf = New StdSchedulerFactory()
Dim sched As IScheduler
sched = sf.GetScheduler()
'计算作业调度的时间
Dim runTime As DateTimeOffset
runTime = DateBuilder.EvenSecondDate(System.DateTime.Now.AddMinutes(1))
'定义作业
Dim job As IJobDetail = JobBuilder.Create(Of helloJob)().WithIdentity("job1", "group1").Build()
'创建触发器,设置触发器调度的时间
Dim trigger As ITrigger = TriggerBuilder.Create().WithIdentity("trigger1", "group1").StartAt(runTime).Build()
'调解器装配调度作业
sched.ScheduleJob(job, trigger)
'开启调度器,这时并不调度作业(如果调度时间未到),当作业执行时间到时,调度器开启触发器调度作业执行(此时作业真正执行)
sched.Start()
'当调度器开始
log.Info("------- Started Scheduler -----------------")
log.Info(System.DateTime.Now.ToString())
'run the job!
log.Info("------- Waiting 65 seconds... -------------")
'wait 65 seconds to show jobs
Thread.Sleep(TimeSpan.FromSeconds(120))
'shut down the scheduler
log.Info("------- Shutting Down ---------------------")
log.Info(System.DateTime.Now.ToString())
sched.Shutdown(True)
log.Info("------- Shutdown Complete -----------------")
End Sub
End Class
这是个比较简单的例子!