Quartz.Net学习笔记(一)
概述
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
这是个比较简单的例子!