简介

Quartz.NET是一个开源的作业调度框架,是OpenSymphony的 Quartz API的.NET移植,
它用C#写成,可用于winform和asp.net应用中。它提供了巨大的灵活性而不牺牲简单性。
你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,
如:数据库支持,集群,插件,支持cron-like表达式等等。

https://www.quartz-scheduler.net/documentation/quartz-3.x/tutorial/index.html

Nuget

1.一旦调度程序被实例化,它就可以启动,进入待机模式,并关机。请注意,一旦调度程序关闭,不能重新启动而不被重新实例化。触发器不会触发(作业不会执行),直到调度程序启动,也不会处于暂停状态。

    public class Program
{
private static void Main(string[] args)
{
// construct a scheduler factory
ISchedulerFactory schedFact = new StdSchedulerFactory(); // get a scheduler
IScheduler sched = schedFact.GetScheduler();
sched.Start(); // define the job and tie it to our HelloJob class
IJobDetail job = JobBuilder.Create<HelloJob>()
.WithIdentity("myJob", "group1")
.Build(); // Trigger the job to run now, and then every 40 seconds
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("myTrigger", "group1")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInSeconds()
.RepeatForever())
.Build(); sched.ScheduleJob(job, trigger);
Thread.Sleep(TimeSpan.FromSeconds());
sched.Shutdown();
//关闭后,重新启动计划异常
//sched.Start(); Console.WriteLine($"Press any key to close the application!{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");
Console.ReadKey();
}
} public class HelloJob : IJob
{
public void Execute(IJobExecutionContext context)
{
Console.WriteLine($"Greetings from HelloJob!{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");
}
}

2.接口和静态方法

IScheduler - 与调度程序交互的主要API。
IJob - 您希望由调度程序执行的组件实现的接口。
IJobDetail - 用于定义作业的实例。
ITrigger - 定义执行给定Job的时间表的组件。
JobBuilder - 用于定义/构建JobDetail实例,它定义了Jobs的实例。
TriggerBuilder - 用于定义/构建触发器实例。

3.参数传递

namespace quartz.net
{
public class Program
{
private static void Main(string[] args)
{
// construct a scheduler factory
ISchedulerFactory schedFact = new StdSchedulerFactory(); // get a scheduler
IScheduler sched = schedFact.GetScheduler();
sched.Start(); // define the job and tie it to our HelloJob class
IJobDetail job = JobBuilder.Create<HelloJob>()
.WithIdentity("myJob", "group1")
//JobDataMap可以用来保存任何数量的(可序列化的)对象,当你执行任务时,你希望这些对象可用。JobDataMap是IDictionary接口的一个实现,并且增加了一些方便的方法来存储和检索原始类型的数据。
.UsingJobData("JobSays", "Hello World!")
.UsingJobData("FloatValue", 3.141f)
.Build(); // Trigger the job to run now, and then every 40 seconds
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("myTrigger", "group1")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInSeconds()
.RepeatForever())
.Build(); sched.ScheduleJob(job, trigger);
Thread.Sleep(TimeSpan.FromSeconds());
sched.Shutdown();
//关闭后,重新启动计划异常
//sched.Start(); Console.WriteLine($"Press any key to close the application!{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");
Console.ReadKey();
}
} public class HelloJob : IJob
{
public string JobSays { private get; set; }
public float FloatValue { private get; set; }
public void Execute(IJobExecutionContext context)
{
JobKey key = context.JobDetail.Key;
//从JobDataMap获取值
//JobDataMap dataMap = context.JobDetail.JobDataMap;
//string jobSays = dataMap.GetString("JobSays");
//float myFloatValue = dataMap.GetFloat("FloatValue"); Console.Error.WriteLine("Instance " + key + " of DumbJob says: " + JobSays + ", and val is: " + FloatValue);
Console.WriteLine($"Greetings from HelloJob!{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");
}
}
}

4.配置任务出发时间次数

            //在特定的时刻建立一个触发器,不要重复:
ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.StartAt(DateTimeOffset.Now) // some Date
.ForJob("myJob", "group1") // identify job with name, group strings
.Build();
            //建立一个触发器,将在未来5秒触发一次:
ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create()
.WithIdentity("trigger5", "group1")
.StartAt(DateBuilder.FutureDate(, IntervalUnit.Second)) // use DateBuilder to create a date in the future
.ForJob(job) // identify job with its JobKey
.Build();
sched.ScheduleJob(job,trigger);
            ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create()
.WithIdentity("trigger3", "group1")
.StartNow()
.WithSimpleSchedule(x => x.WithIntervalInSeconds().WithRepeatCount()) // note that 10 repeats will give a total of 11 firings
.ForJob(myJob) // identify job with handle to its JobDetail itself
.Build();
            var trigger = TriggerBuilder.Create()
.WithIdentity("trigger7", "group1")
.WithSimpleSchedule(x => x
.WithIntervalInSeconds()
.RepeatForever())
.EndAt(DateBuilder.DateOf(, , ))
.Build();

5.CronTrigger

Cron-Expressions用于配置CronTrigger的实例。Cron-Expressions是由七个子表达式组成的字符串,
它们描述了计划的各个细节。这些子表达式用空格分隔,表示:

分钟
小时
日(MON - SUN)
月(为0到11之间的值)
星期X
年份(可选字段)

*字符可以用来表示该字段的“每个”可能的值。
/字符可用于指定增量值。
例如,如果您在“分钟”字段中输入“0/15”,则意味着“每15分钟,从零开始”。
如果在“分钟”字段中使用了“3/20”,则意味着“每小时20分钟,从第三分钟开始” - 或者换句话说,就是在分钟中指定“3,23,43”领域。

?字符被允许用于日期和星期几字段。
它用来指定“没有具体的价值”。
当你需要在两个字段中的一个字段中指定某些内容时,这是非常有用的,而不是其他的。请参阅下面的示例(和CronTrigger API文档)进行说明。

月份和星期几字段允许使用“L”字符。这个角色对于“最后”来说是短暂的,但是在两个领域中的每一个都有不同的含义。例如,月份字段中的值“L”意味着“月份的最后一天”,
即非闰年的2月28日的1月31日。如果单独使用在星期几字段中,则仅表示“7”或“SAT”。但是,如果在星期几字段中使用另一个值,则表示“本月的最后一个xxx日”,
例如“6L”或“FRIL”都表示“本月的最后一个星期五”。当使用“L”选项时,不要指定列表或值的范围,因为您会得到令人困惑的结果。

“W”用于指定与指定日期最近的星期几(星期一至星期五)。例如,如果您要指定“15W”作为月份日期字段的值,则其含义是:“最近的星期几到本月15日”。

“#”用于指定该月的第n个“XXX”工作日。例如,星期几字段中的“6#3”或“FRI#3”的值表示“月的第三个星期五”。

"0 0 12?* WED" 每个星期三中午12:00触发
"0 0/5 * * * ?" 每5分钟触发
"0 30 10-13 ? * WED,FRI"每周三和周五的10:,:,:30和13:30发生的触发器

Quartz.net入门的更多相关文章

  1. Quartz Sheduler 入门

    Quartz Sheduler 入门 原文地址:http://www.quartz-scheduler.org/generated/2.2.2/html/qtz-all/ 下载地址:http://qu ...

  2. Quartz任务调度入门

    Quartz任务调度入门 了解Quartz体系结构Quartz对任务调度的领域问题进行了高度的抽象,提出了调度器.任务和触发器这3个核心的概念,并在org.quartz通过接口和类对重要的这些核心概念 ...

  3. Quartz学习——Quartz简单入门Demo(二)

    要学习Quartz框架,首先大概了解了Quartz的基本知识后,在通过简单的例子入门,一步一个脚印的走下去. 下面介绍Quartz入门的示例,由于Quartz的存储方式分为RAM和JDBC,分别对这两 ...

  4. C# -- Quartz.Net入门案例

    1. 入门案例 using Quartz;using Quartz.Impl; public class PrintTime : IJob { public Task Execute(IJobExec ...

  5. Net作业调度(一) -Quartz.Net入门

    背景 很多时候,项目需要在不同时刻,执行一个或很多个不同的作业. Windows执行计划这时并不能很好的满足需求了,迫切需要一个更为强大,方便管理,集群部署的作业调度框架. 介绍 Quartz一个开源 ...

  6. Quartz.NET 入门

    概述 Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等. Quartz.NET允许开发人员根据时间间隔(或天)来调度作业.它实现了 ...

  7. 【quartz】 入门-配置文件

    quartz 启动 NameValueCollection props = (NameValueCollection)ConfigurationManager.GetSection("qua ...

  8. Quartz使用-入门使用(java定时任务实现)

    注:这里使用的是Quartz1.6.5版本号(包:quartz-1.6.5.jar) //測试main函数 //QuartzTest.java package quartzPackage; impor ...

  9. Quartz使用-入门使用

    注:这里使用的是Quartz1.6.5版本(包:quartz-1.6.5.jar) //测试main函数 //QuartzTest.java package quartzPackage; import ...

  10. Quartz.NET 入门(转)

    概述 Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等. Quartz.NET允许开发人员根据时间间隔(或天)来调度作业.它实现了 ...

随机推荐

  1. kafka组件makemirror处理跨机房业务的应用

    业务背景:app分散在不同的idc厂商不同的地域,产生业务数据都向一个kafka中进行处理,这些数据比较分散,如果一时网络抖动或者其他因素,数据就丢失了app --> kafka --> ...

  2. [Linux][HTTP] Cookie和Set-Cookie

    HTTP 请求报文通过Cookie字段通知服务端当前页面的域生效中的cookie; GET /my/login.php HTTP/1.1 Host: 192.168.88.207:91 Connect ...

  3. iOS Code Sign On Copy

    上面的图中,code sign on copy 是什么意思呢? 先看专业的解释:http://stackoverflow.com/questions/30963294/creating-ios-osx ...

  4. python-进程池与线程池,协程

    一.进程池与线程池 实现并发的手段有两种,多线程和多进程.注:并发是指多个任务看起来是同时运行的.主要是切换+保存状态. 当我们需要执行的并发任务大于cpu的核数时,我们需要知道一个操作系统不能无限的 ...

  5. ES5与ES6的研究

    今天开始ES5与ES6的研究. 1.什么是ES5与ES6? 就是ECMAScript的第五个版本与第六个版本,那么问题来了,什么是ECMAScript?首先它是一种由Ecma国际通过ECMA-262标 ...

  6. 在v-html中,js 正则表达式清除字符串里的style属性

    项目中遇到这样的需求,后端返回的是字符串,在vue用v-html显示,里面有style样式,要去除style 在v-html中使用filters,和平时的不一样,推荐项目的方法,定义一个全局的过滤方法 ...

  7. WinSCP安装与使用

      WinSCP 是一个 Windows 环境下使用的 SSH(Source Shell)的开源图形化 SFTP(SSH File Transfer Protocol) 客户端.同时支持 SCP(So ...

  8. 3、SourceTree通过PUTTY连接GitLab

    一.生成公钥和私钥 使用命令行生成(两种生成方式选择一种即可) 1.安装SourceTree打开SourceTree,点击“命令行模式”. 2.输入如下命令生成key“example@example. ...

  9. Oracle数据库内存使用情况分析查看

    SGA.PGA使用情况 select name,total,round(total-free,2) used, round(free,2) free,round((total-free)/total* ...

  10. linux 下创建共享文件夹

    首先需要在win下共享一个盘 然后设置virtulbox 然后修改一串代码 参考原文 https://jingyan.baidu.com/article/2fb0ba40541a5900f2ec5f0 ...