zoukankan      html  css  js  c++  java
  • Quartz使用

    背景

    很多时候,项目需要在不同时刻,执行一个或很多个不同的作业。

    Windows执行计划这时并不能很好的满足需求了,迫切需要一个更为强大,方便管理,集群部署的作业调度框架。

    介绍

    Quartz一个开源的作业调度框架,OpenSymphony的开源项目。Quartz.Net 是Quartz的C#移植版本。

    它一些很好的特性:

    1:支持集群,作业分组,作业远程管理。 

    2:自定义精细的时间触发器,使用简单,作业和触发分离。

    3:数据库支持,可以寄宿Windows服务,WebSite,winform等。

    实战

    Quartz框架的一些基础概念解释:

       Scheduler     作业调度器。

       IJob             作业接口,继承并实现Execute, 编写执行的具体作业逻辑。

      JobBuilder       根据设置,生成一个详细作业信息(JobDetail)。

      TriggerBuilder   根据规则,生产对应的Trigger

    Nuget安装 

     PM> Install-Package Quartz 

    下面是简单使用例子,附带详细的注释:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    static void Main(string[] args)
           {
               //从工厂中获取一个调度器实例化
               IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
     
               scheduler.Start();       //开启调度器
     
               //==========例子1(简单使用)===========
     
               IJobDetail job1 = JobBuilder.Create<HelloJob>()  //创建一个作业
                   .WithIdentity("作业名称", "作业组")
                   .Build();
     
               ITrigger trigger1 = TriggerBuilder.Create()
                                           .WithIdentity("触发器名称", "触发器组")
                                           .StartNow()                        //现在开始
                                           .WithSimpleSchedule(x => x         //触发时间,5秒一次。
                                               .WithIntervalInSeconds(5)
                                               .RepeatForever())              //不间断重复执行
                                           .Build();
     
     
               scheduler.ScheduleJob(job1, trigger1);      //把作业,触发器加入调度器。
     
               //==========例子2 (执行时 作业数据传递,时间表达式使用)===========
     
               IJobDetail job2= JobBuilder.Create<DumbJob>()
                                           .WithIdentity("myJob", "group1")
                                           .UsingJobData("jobSays", "Hello World!")
                                           .Build();
     
     
               ITrigger trigger2 = TriggerBuilder.Create()
                                           .WithIdentity("mytrigger", "group1")
                                           .StartNow()
                                           .WithCronSchedule("/5 * * ? * *")    //时间表达式,5秒一次     
                                           .Build();
     
     
               scheduler.ScheduleJob(job2, trigger2);     
             
               //scheduler.Shutdown();         //关闭调度器。
           }

    声明要执行的作业,HelloJob:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /// <summary>
       /// 作业
       /// </summary>
       public class HelloJob : IJob
       {
           public void Execute(IJobExecutionContext context)
           {
               Console.WriteLine("作业执行!");
           }
       }

    声明要执行的作业,DumbJob:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public class DumbJob : IJob
        {
            /// <summary>
            ///  context 可以获取当前Job的各种状态。
            /// </summary>
            /// <param name="context"></param>
            public void Execute(IJobExecutionContext context)
            {
     
                JobDataMap dataMap = context.JobDetail.JobDataMap;
     
                string content = dataMap.GetString("jobSays");
     
                Console.WriteLine("作业执行,jobSays:" + content);
            }
        }

    其WithCronSchedule("") 拥有强大的Cron时间表达式,正常情况下WithSimpleSchedule(x) 已经满足大部分对日期设置的要求了。

    Quartz.Net官方2.X教程  http://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/index.html

    Quartz.Net开源地址   https://github.com/quartznet/quartznet

  • 相关阅读:
    三次请求(读-改-读)引出nibernate 一级缓存
    算法竞赛入门经典第一、二章摘记
    uva 10905 Children's Game
    uva 11205 The broken pedometer
    uva 10160 Servicing stations
    uva 208 Firetruck
    uva 167 The Sultan's Successors
    zoj 1016 Parencodings
    uva 307 Sticks
    uva 216 Getting in Line
  • 原文地址:https://www.cnblogs.com/huzige/p/7102794.html
Copyright © 2011-2022 走看看