源码地址
官方文档
集成
1.安装
Install-Package Quartz.AspNetCore
或
<PackageReference Include="Quartz.AspNetCore" Version="3.4.0" />
2.创建工作单元
using Quartz;
namespace WebApplication1.ScheduledTask
{
/// <summary>
/// 工作项
/// </summary>
[DisallowConcurrentExecution]
public class HelloJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
return Task.Run(() =>
{
Console.WriteLine(DateTime.Now + "HelloJob Start:**************Excuting Check**************");
});
}
}
}
3.注入
#region 定时任务
builder.Services.AddQuartz(q =>
{
//用于注入
q.UseMicrosoftDependencyInjectionJobFactory();
// 基本Quartz调度器、作业和触发器配置
var jobKey = new JobKey("RegularWork", "regularWorkGroup");
q.AddJob<HelloJob>(jobKey, j => j.WithDescription("MyJob"));
q.AddTrigger(t => t
.WithIdentity("Trigger")
.ForJob(jobKey)
.StartNow()
.WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromSeconds(2)).RepeatForever())
.WithDescription("My regular work trigger"));
});
// ASP.NET Core hosting
builder.Services.AddQuartzServer(options =>
{
// true程序终止前等待任务完成
options.WaitForJobsToComplete = true;
});
#endregion 定时任务
失败恢复和异常处理
JobExecutionException是主要捕获错误时操作错误的类
try
{
return Task.Run(() =>
{
throw new Exception("错误信息");
});
}
catch (Exception e)
{
JobExecutionException jobExecutionException = new JobExecutionException(e);
jobExecutionException.RefireImmediately = true;//出错后立马恢复
return Task.Run(() => { });
}
配置项说明
-
[DisallowConcurrentExecution] 不允许任务并发执行
-
触发器配置
- WithCronSchedule,cron表达式支持
- WithInterval,间隔时长
- RepeatForever,永远重复
- WithDescription,描述
- WithRepeatCount,重复次数
核心说明
IScheduler:与调度程序进行交互的主要API。
IJob:由您希望由调度程序执行的组件实现的接口。
IJobDetail:用于定义Jobs的实例。
ITrigger:定义将在其上执行给定Job的计划的组件。
JobBuilder:用于定义/构建JobDetail实例,该实例定义Jobs实例。
TriggerBuilder:用于定义/构建触发器实例
SchedulerBuilder:用于定义/构建调度程序实例,需要Quartz 3.1或更高版本