博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NET - NET Core Quartz.net开源作业调度框架使用详解
阅读量:4051 次
发布时间:2019-05-25

本文共 4274 字,大约阅读时间需要 14 分钟。

前言

quartz.net作业调度框架是伟大组织OpenSymphony开发的quartz scheduler项目的.net延伸移植版本。支持 ,集群,数据库。功能性能强大更不用说。

下载项目文档官网:

项目中需引用:Common.Logging.dll , Common.Logging.Core.dll , Quartz.dll 

下面给大家分解下我最近做的关于计划调度的一个小项目,来辅助理解quartz.net的功能和常用方法。

 

quartz.net的简单用法 -入门

1.创建一个每隔3秒钟执行一次的计划调度

public class RunMain    {        static void Main(string[] args)        {            Console.WriteLine(DateTime.Now.ToString("r"));            //1.首先创建一个作业调度池            ISchedulerFactory schedf = new StdSchedulerFactory();            IScheduler sched = schedf.GetScheduler();            //2.创建出来一个具体的作业            IJobDetail job = JobBuilder.Create
().Build(); //3.创建并配置一个触发器 ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create().WithSimpleSchedule(x=>x.WithIntervalInSeconds(3).WithRepeatCount(int.MaxValue)).Build(); //4.加入作业调度池中 sched.ScheduleJob(job, trigger); //5.开始运行 sched.Start(); Console.ReadKey(); } } public class JobDemo : IJob { ///
/// 这里是作业调度每次定时执行方法 /// ///
public void Execute(IJobExecutionContext context) { Console.WriteLine(DateTime.Now.ToString("r")); } }

Note:1、记下作业调度创建的顺序。2、上述代码执行结果是,每三秒执行一次JobDemo中的Execute。

 

2.改进(丰富调度计划):上一个作业,我想让他每三秒执行一次,一共执行100次,开始执行时间设定在当前时间,结束时间我设定在2小时后,不过100次执行完没2小时候都不再执行。

public class RunMain    {        static void Main(string[] args)        {            Console.WriteLine(DateTime.Now.ToString("r"));            //首先创建一个作业调度池            ISchedulerFactory schedf = new StdSchedulerFactory();            IScheduler sched = schedf.GetScheduler();            //创建出来一个具体的作业            IJobDetail job = JobBuilder.Create
().Build(); //NextGivenSecondDate:如果第一个参数为null则表名当前时间往后推迟2秒的时间点。 DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddSeconds(1), 2); DateTimeOffset endTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddHours(2), 3); //创建并配置一个触发器 ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create().StartAt(startTime).EndAt(endTime) .WithSimpleSchedule(x=>x.WithIntervalInSeconds(3).WithRepeatCount(100)) .Build(); //加入作业调度池中 sched.ScheduleJob(job, trigger); //开始运行 sched.Start(); Console.ReadKey(); } } public class JobDemo : IJob { ///
/// 这里是作业调度每次定时执行方法 /// ///
public void Execute(IJobExecutionContext context) { Console.WriteLine(DateTime.Now.ToString("r")); } }

 

 

3.继续改进(cron-like使用):前两个作业调度都太简单,如果我想在每小时的第10,20,25,26,33,54分钟,每分钟的第1,10,14秒执行一次。那么上面显然是不能满足的。这是我就把cron-like表达式引入进来,以实现各种时间纬度的调用。

public class RunMain    {        static void Main(string[] args)        {            Console.WriteLine(DateTime.Now.ToString("r"));            //首先创建一个作业调度池            ISchedulerFactory schedf = new StdSchedulerFactory();            IScheduler sched = schedf.GetScheduler();            //创建出来一个具体的作业            IJobDetail job = JobBuilder.Create
().Build(); //NextGivenSecondDate:如果第一个参数为null则表名当前时间往后推迟2秒的时间点。 DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddSeconds(1), 2); DateTimeOffset endTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddYears(2), 3); //创建并配置一个触发器 ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create().StartAt(startTime).EndAt(endTime) .WithCronSchedule("1,10,14 10,20,25,26,33,54 * * * ? ") .Build(); //加入作业调度池中 sched.ScheduleJob(job, trigger); //开始运行 sched.Start(); //挂起2天 Thread.Sleep(TimeSpan.FromDays(2)); //2天后关闭作业调度,将不在执行 sched.Shutdown(); Console.ReadKey(); } } public class JobDemo : IJob { ///
/// 这里是作业调度每次定时执行方法 /// ///
public void Execute(IJobExecutionContext context) { Console.WriteLine(DateTime.Now.ToString("r")); } }

 

 

 

转载地址:http://smnci.baihongyu.com/

你可能感兴趣的文章
Maven项目版本继承 – 我必须指定父版本?
查看>>
通过C++反射实现C++与任意脚本(lua、js等)的交互(二)
查看>>
利用清华镜像站解决pip超时问题
查看>>
微信小程序开发全线记录
查看>>
CCF 分蛋糕
查看>>
解决python2.7中UnicodeEncodeError
查看>>
小谈python 输出
查看>>
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
查看>>
python:如何将excel文件转化成CSV格式
查看>>
机器学习实战之决策树(一)
查看>>
机器学习实战之决策树二
查看>>
[LeetCode By Python]7 Reverse Integer
查看>>
[LeetCode By Python]121. Best Time to Buy and Sell Stock
查看>>
[LeetCode By Python]122. Best Time to Buy and Sell Stock II
查看>>
[LeetCode By Python]125. Valid Palindrome
查看>>
[LeetCode By Python]136. Single Number
查看>>
Android/Linux 内存监视
查看>>
Android2.1消息应用(Messaging)源码学习笔记
查看>>
MPMoviePlayerViewController和MPMoviePlayerController的使用
查看>>
CocoaPods实践之制作篇
查看>>