基本使用
创建任务类:输出一个系统时间就行比较简单(实际是执行任务的方法)
public class TestJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
return Task.Run(() =>
{
Console.WriteLine(DateTime.Now);
});
}
}
使用控制台开始调度
static void Main(string[] args)
{
StdSchedulerFactory schedulerFactory = new StdSchedulerFactory();
IScheduler _scheduler = schedulerFactory.GetScheduler().Result;
//创建触发器(也叫时间策略),每10秒执行一次,一直重复
var trigger = TriggerBuilder.Create()
.WithSimpleSchedule(x => x.WithIntervalInSeconds(10).RepeatForever())
.Build();
//创建作业实例
//TestJob即我们需要执行的作业
var jobDetail = JobBuilder.Create<TestJob>()
.WithIdentity("Test", "Group")//我们给这个作业取了个“Test”的名字,并取了个组名为“Group”
.Build();
//将触发器和作业任务绑定到调度器中
_scheduler.ScheduleJob(jobDetail, trigger);
//开启调度器
_scheduler.Start();
//注意这种方式编写不能让程序结束,不然控制台运行完程序直接就结束了,定时任务肯定看不到输出了。
Console.ReadLine();
}
如果只执行一次的话这样即可
WithRepeatCount设置为0
var trigger = TriggerBuilder.Create()
.WithSimpleSchedule(x => x.WithIntervalInSeconds(5).WithRepeatCount(0))
.Build();
更多时间策略
Quartz中有两种触发策略分别是:
Simple Trigger
CronTrigger
SimpleTrigger
可以满足的调度需求是:在具体的时间点执行一次,或者在具体的时间点执行,并且以指定的间隔重复执行,否者只执行具体的次数
每30秒执行一次,重复5次:
var trigger = TriggerBuilder.Create()
.WithSimpleSchedule(x => x.WithIntervalInSeconds(30).WithRepeatCount(5))
.Build();
30分钟以后开始触发,仅执行一次
var trigger = TriggerBuilder.Create()
.WithSimpleSchedule()
.StartAt(DateTimeOffset.Now.AddMinutes(30))
.Build();
在22点过3分执行一次,只执行一次。注意这样设置,如果现在时间已经过了22点3分它任务这个定时的时候已经到了会马上执行,要想特定的时间点可以把年月日加上
//在22点过3分执行一次,只执行一次
var trigger = TriggerBuilder.Create()
.WithSimpleSchedule()
.StartAt(DateBuilder.DateOf(22, 3, 0))
.Build();
在某个特定时间点执行定时任务,比如在2022-9-9早上8点执行一次,只执行一次
//在整点8点执行一次,只执行一次
var trigger = TriggerBuilder.Create()
.WithSimpleSchedule()
.StartAt(DateBuilder.DateOf(08,0, 0))
.Build();
立即触发,每个2小时执行一次,直到10:30:30
var trigger = TriggerBuilder.Create()
.WithSimpleSchedule(x => x.WithIntervalInHours(2).RepeatForever())
.EndAt(DateBuilder.DateOf(10, 30, 30))
.Build();
在下一个小时的整点触发,然后每1小时重复一次
var trigger = TriggerBuilder.Create()
.WithSimpleSchedule(x => x.WithIntervalInHours(1).RepeatForever())
.StartAt(DateBuilder.EvenHourDate(null))
.Build();
CronTrigger
CronTrigger比SimpleTrigger更强大一点,可以基于日历的概念指定任务计划,稍后在介绍。
或者搜索一下Cron表达式生成器就有基本可以涵盖所有场景
http://tnblog.net/aojiancc2/article/details/7082