zoukankan      html  css  js  c++  java
  • Net作业调度(一) -Quartz.Net入门 Quartz表达式生成器 [转]

    背景

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

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

     

    介绍

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

    它一些很好的特性:

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

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

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

    实战

    一:一些基础概念。

       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();         //关闭调度器。
           }

      

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

      

    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("") 强大的时间表达式。

    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

     ---------------------------------------------------------------------------------

          Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或 EJBs。

          Java版本的地址:http://www.quartz-scheduler.org/documentation,.Net版本的地址:http://quartznet.sourceforge.net/ 。

          如果手工进行设置Crons表达式,比较繁琐,本文对之前网上提供的Java的Quartz表达生器源代码进行封装打包,

    附件中可进行下载,具体如下图:

         

          

         

        

       

       

      

      下载地址:Quartz表达式生成器

  • 相关阅读:
    记录几个IDEA插件使用方式
    constructor()方法
    SQL笔记
    修改hosts的方式fq
    正则表达式学习
    android架构下各层的分工
    【转】android的mm命令
    虚拟存储器
    xcode 7种使用coredata遇到 Class not found, using default NSManagedObject instead.问题
    AppStore上架规则
  • 原文地址:https://www.cnblogs.com/fx2008/p/4243321.html
Copyright © 2011-2022 走看看