Quartz.NET

来源:互联网 发布:中文分词python 编辑:程序博客网 时间:2024/05/16 23:53

 Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。

Quartz.NET框架的核心是调度器。调度器负责管理Quartz.NET应用运行时环境。Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz.NET采用了基于多线程的架构。启动时,框架初始化一套worker线程,这套线程被调度器用来执行预定的作业。这就是Quartz.NET怎样能并发运行多个作业的原理。Quartz.NET依赖一套松耦合的线程池管理部件来管理线程环境。作业是一个执行任务的简单.NET类。只需实现Quartz.IJob接口,IJob接口包含唯一的一个方法Execute(),作业从这里开始执行。一旦实现了IJob接口和Execute ()方法,当Quartz.NET确定该是作业运行的时候,它将调用作业。Execute()方法内就是要做的事情。

代码下载地址:http://download.csdn.net/download/sdsasasd/4655892

Quartz.NET 是一个开源的作业调度框架,它可以被在小型应用程序甚至是企业级的应用程序。它有如下几个特点:

  • API 操作简单,只要几行简单的代码你就可以在应用程序里面实现自己的作业调度,并实时监视作业执行情况
  • 触发器功能强大,比 Windows 的任务计划提供更细的触发粒度,你可以使用“Cron表达式(后文将介绍)”来实现如:每周星期一到星期五 8:00am,5:00pm(工作时间) 执行某一件任务
  • 良好的可扩展性,它基于接口编程,你可以实现自己的 Schedule 调度器,Job 作业,以及 Trigger 触发器等
  • 作业可以保存在 RAM 中,也可以持久化到数据库,支持多种数据库类型:SqlServer、Oracle、MySql等
  • 集群,这是一个高级应用,可以在多台计算机之间创建负载平衡、容错处理
测试代码:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using Quartz;using Quartz.Impl;using Common.Logging;namespace TestQuartz{    public class Job1 : IJob    {        private int i = 0;        public void Execute(IJobExecutionContext context)        {            Console.WriteLine(++i);        }    }    class Program    {               static void Main(string[] args)        {            //初始化调度器工厂             ISchedulerFactory sf = new StdSchedulerFactory();            //获取默认调度器             IScheduler scheduler = sf.GetScheduler();            //作业             IJobDetail job = JobBuilder                    .Create<Job1>()                    .WithIdentity("计算作业", "组1")                    .RequestRecovery() // ask scheduler to re-execute this job if it was in progress when the scheduler went down...                    .Build();            //触发器             ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create()                                              .WithIdentity("触发器1", "触发器组1")                                              .StartAt(DateBuilder.FutureDate(1, IntervalUnit.Second))                                              .WithSimpleSchedule(x => x.WithRepeatCount(20).WithInterval(TimeSpan.FromSeconds(5)))                                              .Build();            //关联任务和触发器             scheduler.ScheduleJob(job, trigger);            //开始任务             scheduler.Start();            Console.Read();        }    }}



原创粉丝点击