zoukankan      html  css  js  c++  java
  • 作业调度框架 【Quartz.NET】 的使用

    Quartz.NET是一个强大、开源、轻量的作业调度框架。能够用它来为执行一个作业而创建简单的或复杂的作业调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。

    官网:http://www.quartz-scheduler.net/

    一、使用Nuget安装Quartz.NET

    二、应用示例

    让应用程序每隔5秒钟向C:Quartz.txt文件中记录当前时间。

    这是一个Web应用,我想让网站一启动时就开始该项工作,这里我们需要打开Global.asax.cs,将代码写在Application_Start方法中。

    1. 定义一个任务类,实现Quartz.IJob接口,实现Execute方法

    using Quartz;
        public class TimeJob : IJob
        {
            public void Execute(IJobExecutionContext context)
            {
                //向c:Quartz.txt写入当前时间并换行
                System.IO.File.AppendAllText(@"c:Quartz.txt", DateTime.Now+Environment.NewLine);
            }
        }

    2.创建一个调度器。调度器负责管理与控制任务的执行。

    Global.asax.cs文件中声明变量,

       //调度器
       IScheduler scheduler;
       //调度器工厂
       ISchedulerFactory factory;

    Application_Start()方法中添加如下代码:

      //创建一个调度器
      factory = new StdSchedulerFactory();
      scheduler = factory.GetScheduler();
      scheduler.Start();

    3. 创建一个任务对象。

    这个任务对象就是我们将要执行的工作,job1是名称,group1是组名。在Application_Start()方法中添加如下代码:

       //2、创建一个任务
       IJobDetail job = JobBuilder.Create<TimeJob>().WithIdentity("job1", "group1").Build();

    4.创建一个触发器。

    触发器定义了什么时间任务开始或每隔多久执行一次。在Application_Start()方法中添加如下代码:

        //3、创建一个触发器
        //DateTimeOffset runTime = DateBuilder.EvenMinuteDate(DateTimeOffset.UtcNow);
        ITrigger trigger = TriggerBuilder.Create()
                    .WithIdentity("trigger1", "group1")
                    .WithCronSchedule("0/5 * * * * ?")     //5秒执行一次
                    //.StartAt(runTime)
                    .Build();

    5.将任务与触发器添加到调度器中并执行。在Application_Start()方法中添加如下代码:

        //4、将任务与触发器添加到调度器中
        scheduler.ScheduleJob(job, trigger);
        //5、开始执行
        scheduler.Start();

    6. 应用关闭时结束任务。

    Shutdown方法中的参数true的意思为:是否等待任务的完成再结束。在Global.asax.cs中的Application_End()方法中添加如下代码:

        //   在应用程序关闭时运行的代码
        if (scheduler != null)
        {
             scheduler.Shutdown(true);
        }
     *****************************
     *** Keep learning and growing. ***
     *****************************
  • 相关阅读:
    JavaScript
    CSS
    HTML5&CSS
    I2C mux和复杂拓扑
    如何实例化I2C设备
    SMBus 协议
    I2C 协议
    I2C和SMBus简介
    ubuntu20.04系统下更新Raspberry Pi4的DTB
    通过configfs配置的Linux USB gadget
  • 原文地址:https://www.cnblogs.com/gangle/p/9316037.html
Copyright © 2011-2022 走看看