• ASP.NET MVC5+EF6+EasyUI 后台管理系统(84)-Quartz 作业调度用法详解一


    系列目录

    前言

    我从Quartz2.0开始使用,并对其进行了封装了界面,可以参考 http://www.cnblogs.com/ymnets/p/5065154.html

    最近拿出来进行了优化,并升级到最新版,温故而知新嘛

    当初教程较少,并且是英文,现在很多地方都有中文的教程也是学习起来事半功倍

    Quartz能实现什么?

    他类似于SQL Server的代理与Timer定时器:

    1.指定时间执行一条SQL语句或存储过程

    2.指定时间发送邮件(执行一个C#方法)

    3.有规律的定时执行想要做的事情(通过配置Cron表达式来实现),如:每个星期1,3,5给用户发送一条短信

    4.作业任务他可以被暂停,挂起,停止

    5.作业任务可以远程被操作管理,数据库保存(支持多种数据库包括:SqlServer,Sqlite,Oracle,Mysql,Firebird)

    使用方法

    从Nuget包直接安装即可

    PM>Install-Package Quartz 

    简单的实现

    我们新建一个控制台程序,并安装Quartz包

    入口代码:

    using Quartz;
    using Quartz.Impl;
    using System;
    
    namespace QuartzTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                // First we must get a reference to a scheduler
                ISchedulerFactory sf = new StdSchedulerFactory();
                IScheduler sched = sf.GetScheduler();
                IJobDetail job = JobBuilder.Create<HelloJob>()
                  .WithIdentity("job1", "group21")
                  .Build();
    
                //什么时候开始执行
                DateTime runTime = DateTime.Now;
                ITrigger trigger = TriggerBuilder.Create()
                .WithIdentity("trigger1", "group1")
                .StartAt(runTime)
                .WithSimpleSchedule(x => x         
                .WithIntervalInSeconds(1) //1秒一次真男人
                .RepeatForever())//无限循环
                .Build();
    
                sched.ScheduleJob(job, trigger);
                //启动任务
                sched.Start();
               
            }
        }
    }
    using Quartz;
    using System;
    using System.Threading.Tasks;
    namespace QuartzTest
    {
        /// <summary>
        /// This is just a simple job that says "Hello" to the world.
        /// </summary>
        /// <author>Bill Kratzer</author>
        /// <author>Marko Lahma (.NET)</author>
        public class HelloJob : IJob
        {
            /// <summary> 
            /// Called by the <see cref="IScheduler" /> when a
            /// <see cref="ITrigger" /> fires that is associated with
            /// the <see cref="IJob" />.
            /// </summary>
            public  void Execute(IJobExecutionContext context)
            {
                Console.WriteLine("Hello Quartz");
                // Say Hello to the World and display the date/time
            }
        }
    }

    运行结果:

    您也可以用表达式的形式来运行:

                ITrigger trigger2 = TriggerBuilder.Create()
                                           .WithIdentity("trigger2", "group1")
                                           .StartAt(runTime)
                                           .WithCronSchedule("/1 * * ? * *")    //时间表达式,1秒一次     
                                           .Build();
                sched.ScheduleJob(job, trigger2);

    效果也是一样的!

    下面我们来看一个类图:

    这个类图描述了,Quartz运行的基本原理

    如何学习其表达式

    我们无需要刻意去背诵他表达式的含义http://cron.qqe2.com/ 界面展示的配置

    可以通过界面的操作来看到生成表达式,使用几次就很少明白。

    后台封装成界面,更加无需要去记得表达式,通过界面的配置即可

    当然你需要知道字符代表的意思,如:*,?等符号,跟通配符有点类似,可以百度

    注:实际上我们后面要做的功能也是基于这种界面,然后手选后将生成的表达式作为运行的定时器而已

    总结

    Quartz比Timer定时器好用多了,定时器还要部署windows任务

    1.HelloJob集成了类图中所示的IJob接口并实现了void Execute(IJobExecutionContext context);方法,这是必须的!

    2.由StdSchedulerFactory.GetDefaultScheduler();来获得一个调度器

    3.把任务加入到触发器

    4.开启任务,自动跑起来

    官方链接:

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

    Quartz.Net源代码  https://github.com/quartznet/quartznet

    文章代码:

    链接:http://pan.baidu.com/s/1pKP6c2Z 密码:dudi

  • 相关阅读:
    Go语言之进阶篇服务器如何知道用户需要什么资源
    Go语言之进阶篇请求报文格式分析
    Go语言之进阶篇实现并发聊天功能
    Go语言之进阶篇文件传输
    Go语言之进阶篇获取文件属性
    Go语言之进阶篇简单版并发服务器
    Go语言之进阶篇TCP相互通信
    Go语言之进阶篇 netcat工具的使用
    HAProxy的高级配置选项-ACL篇之匹配访问路径案例
    HAProxy的高级配置选项-ACL篇之基于文件后缀实现动静分离
  • 原文地址:https://www.cnblogs.com/ymnets/p/6239240.html
Copyright © 2020-2023  润新知