调度器:
Quartz.Net中核心的地方就调度器,调度器负责管理Quartz.NET应用运行时环境。
上一节中代码中IScheduler sched = sf.GetScheduler(); 这一句代码看起来简单,其实背后做了好多事情,比如:初始化配置,是使用数据库还是内存,初始化线程池,是否是远程执行job等等,总之挺复杂的。
作业:
目前我的理解就是job,类似于上一节中自定义的MyJob
触发器:
用来告诉调度器作业什么时候触发.
解发器分为:SimpleTriggerImpl,CronTriggerImpl,DailyTimeIntervalTriggerImpl
具体的代码表现就是继承ITrigger这个接口。
如果只是简单的调度作业,比如每隔一小时执行一次哪么简单调度器(SimpleTriggerImpl)完全适合你,
如果您想指定工作日的每天的早上9点执行一个任务,复杂排程调度器(CronTriggerImpl)更为合适大家
复杂排程调度器采用Calendar-like表达式,
具体见:点我打表达式
例子
比如用复杂排程调度器写一个每天每天下午的 6点到6点59分每隔5s就触发一次的例子
1.雷同上一节的job:
public class MyJob : IJob
{
publicvoid Execute(IJobExecutionContextcontext)
{
Console.WriteLine("我执行了,时间:{0}", DateTime.Now);
}
}
2.雷同上一节的main函数:
static void Main(string[] args)
{
//调度器
ISchedulerFactorysf = new StdSchedulerFactory();
ISchedulersched = sf.GetScheduler();
//job详情,注意MyJob
IJobDetailmyJob = JobBuilder.Create<MyJob>()
.WithIdentity("job1", "group1")
.Build();
//触发器
ITriggertrigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.WithCronSchedule("0/5 * 18 * * ? ")//这里用的复杂排程调度器
.Build();
//关联job和触发器
sched.ScheduleJob(myJob, trigger);
//执行
sched.Start();
Console.Read();
//关掉
sched.Shutdown(true);
}
3.不一样上一节的运行结果:
结语:下载下来Quartz.Net的例子,发现Quartz实在是太实用了,有简单的任务,有状态job,可以执行远程的job,而且配置也很强大,忍不住想往下学……
代码:
using System;
using System.Collections.Generic;
using System.Linq;
using Quartz.Impl;
namespace Quartz.Demo
{
class MyClass
{
static void Main(string[] args)
{
//调度器
ISchedulerFactory sf = new StdSchedulerFactory();
IScheduler sched = sf.GetScheduler();
//job详情,注意MyJob
IJobDetail myJob = JobBuilder.Create<MyJob>()
.WithIdentity("job1", "group1")
.Build();
//触发器
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.WithCronSchedule("0/5 * 18 * * ? ")
.Build();
//关联job和触发器
sched.ScheduleJob(myJob, trigger);
//执行
sched.Start();
Console.Read();
//关掉
sched.Shutdown(true);
}
public class MyJob : IJob
{
public void Execute(IJobExecutionContext context)
{
Console.WriteLine("我执行了,时间:{0}", DateTime.Now);
}
}
}
}