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

这是个比较简单的例子!

posted on 2012-10-19 14:18  vedusoft  阅读(456)  评论(0编辑  收藏  举报