作业相关的知识点就告一段落了,下面会重点学习触发器
1、触发器的通用属性:
所有的触发器都会具有以下三个属性
JobKey
该属性表示,触发器触发时,应该执行的作业的唯一标识(作业的key)
StartTimeUtc
属性指示触发器的时间表何时首次生效(该值是DateTimeOffset 对象)
EndTimeUtc
属性指示触发器的时间表何时不再有效
下面是完整代码演示
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
//注册调度器工厂
services.AddSingleton<ISchedulerFactory>(new StdSchedulerFactory());
}
HomeController.cs
using Microsoft.AspNetCore.Mvc;
using Quartz;
using System;
using System.Threading.Tasks;
namespace QuartzLearn.Controllers
{
public class HomeController : Controller
{
//调度器工厂
private readonly ISchedulerFactory _schedulerFactory;
//构造函数注入
public HomeController(ISchedulerFactory schedulerFactory)
{
//注入调度器工厂
_schedulerFactory = schedulerFactory;
}
public async Task<IActionResult> Index()
{
IScheduler scheduler = await _schedulerFactory.GetScheduler();
await scheduler.Start();
IJobDetail job = JobBuilder.Create<HelloJob>()
.WithIdentity("job1", "jobGroup1")
.UsingJobData("name", "zhangsan")
.Build();
//在未来五分钟触发一次的触发器
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.StartAt(DateBuilder.FutureDate(5, IntervalUnit.Minute))
.EndAt(DateBuilder.DateOf(22, 0, 0))
.Build();
await scheduler.ScheduleJob(job, trigger);
Console.WriteLine($"当前时间:{trigger.StartTimeUtc.DateTime}");
Console.WriteLine($"第一次触发开始时间: {trigger.StartTimeUtc.DateTime}");
Console.WriteLine($"触发器失效时间: {trigger.EndTimeUtc?.DateTime}");
Console.WriteLine($"触发时执行的Job: {trigger.JobKey}");
return View();
}
}
[DisallowConcurrentExecution]
[PersistJobDataAfterExecution]
public class HelloJob : IJob
{
public string Name { private get; set; }
public async Task Execute(IJobExecutionContext context)
{
await Console.Out.WriteLineAsync($"This is HelloJob {DateTime.Now}");
}
}
}
执行结果:
2、触发器的优先级:
触发器优先级的默认值为 5
仅在触发器具有相同的触发时间时才比较优先级。计划在10:59触发的触发器将始终在计划在11:00触发的触发器之前触发。
优先级不做过多演示