前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ASP.NET MVC5+EF6+EasyUI 后台管理系统(84)-Quartz 作业调度用法详解一

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

作者头像
用户1149182
发布2018-01-12 15:43:13
1.8K0
发布2018-01-12 15:43:13
举报
文章被收录于专栏:ASP.NET MVC5 后台权限管理系统
系列目录

前言

我从Quartz2.0开始使用,并对其进行了封装了界面,可以参考 https://cloud.tencent.com/developer/article/1351155 最近拿出来进行了优化,并升级到最新版,温故而知新嘛 当初教程较少,并且是英文,现在很多地方都有中文的教程也是学习起来事半功倍

Quartz能实现什么?

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

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

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

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

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

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

使用方法

从Nuget包直接安装即可

代码语言:javascript
复制
PM>Install-Package Quartz 

简单的实现

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

入口代码:

代码语言:javascript
复制
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();
           
        }
    }
}
代码语言:javascript
复制
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
        }
    }
}

运行结果:

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

代码语言:javascript
复制
            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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-06-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • Quartz能实现什么?
  • 使用方法
  • 简单的实现
  • 如何学习其表达式
  • 总结
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档