之前在使用Java的时候,写过Quartz的博客,原文链接:https://blog.csdn.net/qq_41061437/article/category/8523862,现在做.net开发的时候,有个任务需要做定时调度作业,于是想到了Quartz,于是搜索了一番,发现Quartz还真迁移到了.net中,至此,我发现Java中很多优秀的框架或者组件都有迁移到.net中。虽然.net中的Quartz与Java中的Quartz相差不大,但为了学习记录,这里还是进行一下记录。
因为开发原因,我选择的是老版本2.5.0,这里也针对这个版本的使用来记录。首先就是下载Quartz,通过Nuget安装即可,选择2.5.0版本。
我们来看一下里面的主要接口和类:
IScheduler :和调度器交互的主要接口
JobBuilder:定义 JobDetail 实例
IJobDetail:定义 Job 实例及其它相关的静态信息
IJob:自定义的作业模块所要继承的接口,调度器会调用这个实现
TriggerBuilder:定义 Trigger 实例
ITrigger:定义 Job 被触发的时间
整个创建流程如下:
①创建作业调度器 IScheduler
②启动调度器
③创建作业IJobDetail
④创建调度器ITrigger
⑤将作业和调度器加入到作业调度器中
代码实现如下:
static void Main(string[] args)
{
// 创建作业调度器
ISchedulerFactory chedulerFactory = new StdSchedulerFactory();
IScheduler scheduler = chedulerFactory.GetScheduler();
// 启动调度器
scheduler.Start();
// 创建作业
IJobDetail job = JobBuilder.Create<NewJob>()
.WithIdentity("NewJob", "group")
.Build();
// 创建触发器,每5s执行一次
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger", "group")
.StartNow() //现在开始
.WithSimpleSchedule(x => x //触发时间,5秒一次。
.WithIntervalInSeconds(5)
.RepeatForever()) 不间断执行
.Build();
// 加入到作业调度器中
scheduler.ScheduleJob(job, trigger);
}
//作业
public class NewJob : IJob
{
public async Task Execute(IJobExecutionContext context)
{
Console.WriteLine(DateTime.Now);
}
}
Quartz中有个cron表达式来进行时间的配置,比如某天什么时候开始执行,再或者每隔多少时间开始执行,再比如每天的什么时候开始执行,具体cron表达式怎么配置不做过多介绍,可以看我之前的博客。下面我们修改一下上面的代码,让其每天下午六点提醒我们收拾东西,要下班回家了。
static void Main(string[] args)
{
// 创建作业调度器
ISchedulerFactory chedulerFactory = new StdSchedulerFactory();
IScheduler scheduler = chedulerFactory.GetScheduler();
// 启动调度器
scheduler.Start();
// 创建作业
IJobDetail job = JobBuilder.Create<NewJob>()
.WithIdentity("NewJob", "group")
.Build();
// 创建触发器,每天18:00执行一次
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger", "group")
.StartNow() //现在开始
.WithCronSchedule("0 0 18 * * ? *")
.Build();
// 加入到作业调度器中
scheduler.ScheduleJob(job, trigger);
}
//作业
public class NewJob : IJob
{
public void Execute(IJobExecutionContext context)
{
Console.WriteLine("不要摸鱼了,收拾东西,下班回家了!");
}
}
当然,Quartz是很强大的一个任务调度框架,关于更多的使用,我将在后期继续更新。