关闭

定时作业框架Quartz.net的简单应用

439人阅读 评论(0) 收藏 举报
分类:

         在许多应用场景下我们都希望定时执行一些事务,比较常见的是维护数据库:定时生成汇总数据,定时复制插入数据等。其他特定场景下都存在这些定时任务。如果涉及数据库维护的定时任务,我们尚可以使用数据库自带的数据库代理来实现定时批处理。面对其他类型的定时任务,往往只能通过在服务器上编写windows进程等手段来简介实现。上述这些方法存在下列缺点:

         1.需要学习特定的语言或API

          使用SQLServer代理服务来实现定时批处理,需要编写较为复杂的SQL语句。对于许多人来说是一个不小的挑战。如果开发团队中有DBA的另说。但一般小型团队都是身兼数职,不太可能有专业DBA去做维护。编写windows服务也需要学习特定的API。

        2.与运行环境发生了紧耦合

         在大多数情况下,我们不希望应用程序与运行环境发生太多的耦合。特别是很多时候我们对web服务器并没有足够的权限。或者web服务器并不是IIS,而是某个虚拟环境云平台之类,根本就不存在windows服务。这在迁移的时候就会出现很大问题。

        Quartz.net就是用来解决这些问题的。它是基于.NET框架的。我们不需要编写任何非托管代码。而且整个API和C#语言是紧密集成的,使用了C#中的一些新特性如Lambda表达式,流式API等。使用简单,功能异常强大。我们可以用C#代码来编写各种定时任务,简单方便。足以满足一般的常见任务。是小型团队杀人越货之利器。当然如果您人多,预算也多,请出门左拐不送。

      Quartz.net框架包含三个基本部分:调度器、任务和触发器。

      代码如下备查:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Quartz;
using Quartz.Core;
using Quartz.Impl;
using Common.Logging;
using Common.Logging.Factory;
using Common.Logging.Configuration;

namespace QuartzStudy
{
    class Program
    {
        static void Main(string[] args)
        {
            IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
            scheduler.Start();

            IJobDetail job1 = JobBuilder.Create<HelloJob>()  //创建一个作业 
               .Build();

            ITrigger trigger1 = TriggerBuilder.Create()
                                       .WithIdentity("触发器名称", "触发器组")
                                       .StartNow()                        //现在开始 
                                       .WithSimpleSchedule(x => x         //触发时间,5秒一次。 
                                           .WithIntervalInSeconds(5)
                                           .RepeatForever())              //不间断重复执行 
                                       .Build();

            scheduler.ScheduleJob(job1, trigger1);      //把作业,触发器加入调度器。
        }
    }

    public class HelloJob : IJob
    {
        public void Execute(IJobExecutionContext context)
        {
            Console.WriteLine("作业执行!");
        }
    } 
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:29511次
    • 积分:527
    • 等级:
    • 排名:千里之外
    • 原创:21篇
    • 转载:0篇
    • 译文:0篇
    • 评论:3条
    最新评论