Net Core 使用 Quartz
复杂的业务系统经常伴随各种统计作业,许多会定时在深夜时间执行,Quartz是一套开源的作业调度框架,比较适合日常系统各种业务的定时处理
首先创建一个控制台应用程序,添加Quartz依赖包
"Quartz" Version="3.0.7" />
Quartz是3个组成部分,调度器,任务,触发器
创建一个任务
public Task Execute(IJobExecutionContext context) { return Task.Run(() => { var wtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); string path = "/demo.log"; using (StreamWriter sw = new StreamWriter(path, true)) { sw.WriteLine("执行作业" + wtime); } }); }
调度器结合任务和触发器,触发器定义任务的执行时间,执行间隔
static void Main(string[] args) { Console.WriteLine("开始作业"); IScheduler scheduler; ISchedulerFactory factory = new StdSchedulerFactory(); scheduler = factory.GetScheduler().Result; IJobDetail testJobDetail = JobBuilder.Create<DemoJob>().WithIdentity("DemoJob").Build(); ITrigger testJobTrigger = TriggerBuilder.Create().WithCronSchedule("0/5 * * * * ? *").Build(); scheduler.ScheduleJob(testJobDetail, testJobTrigger); scheduler.Start(); while (true) { } }
运行程序,可以看出每隔5秒打印出作业执行时间
cron 表达式使用工具生成
0/5 * * * * ? *
表示每隔5秒执行一次
更多了解cron 表达式 ,可以用https://cron.qqe2.com/ 访问官网工具生成
使用Quartz总结
JobDetail绑定指定的Job,调度器首先New一个Job实例,然后触发器Trigger会去通知Scheduler何时去执行对应Job
获取源码:https://github.com/alindada/netcore/tree/main/NetCore.Quartz