Quartz.NET学习笔记(三) 简单触发器

触发器是Quartz.NET的另外第一个核心元素,他有2种类型,简单触发器(Simple Trigger)和计划任务触发器(Cron  Trigger), 一个触发器可以绑定一个任务。

通用触发器属性

  • JobKey – 当前触发器绑定任务的唯一标识符
  • StartTimeUtc – 触发器的生效开始时间
  • EndTimeUtc – 触发器的生效结束时间

设置触发器的优先级

有些时候,你的程序中可能需要多个触发器,Quartz.NET的调度器可能在同一时间没有足够的资源来触发所有的触发器,这时候我们就需要给触发器设置优先级,让Quartz.NET帮助我们优先触发优先级高的触发器。

 

在声明触发器的时候,可以使用WithPriority方法为触发器指定一个优先级权重,权重越高的,调度器会优先触发

 

例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
ISchedulerFactory schedFact = new StdSchedulerFactory();
 
  
 
IScheduler sched = schedFact.GetScheduler();
 
           
 
  
 
IJobDetail job = JobBuilder.Create<FirstJob>()
 
    .UsingJobData("MyName", "Lunan")
 
    .WithIdentity("myJob")
 
    .Build();
 
  
 
IJobDetail job2 = JobBuilder.Create<SecondJob>()
 
    .UsingJobData("MyName", "Lunan")
 
    .WithIdentity("myJob2")
 
    .Build();
 
  
 
ITrigger trigger = TriggerBuilder.Create()
 
    .WithIdentity("myTrigger")
 
    .StartNow()
 
    .WithPriority(8)
 
    .Build();
 
  
 
ITrigger trigger2 = TriggerBuilder.Create()
 
    .WithIdentity("myTrigger2")
 
    .StartNow()
 
    .WithPriority(999)
 
    .Build();
 
  
 
sched.ScheduleJob(job, trigger);
 
sched.ScheduleJob(job2, trigger2);
 
  
 
sched.Start();



 

执行结果

简单触发器(Simple Trigger)

如果你的项目需求是一下2种类型,可以使用Quartz.NET中的简单触发器。

  • 在某个时间点执行一次任务
  • 在某个时间点开始执行任务,并之后每隔固定的时间,再次执行当前任务

 

在某个时间点触发一次任务就停止#

 

1
2
3
4
5
6
7
8
9
ISimpleTrigger trigger3 = (ISimpleTrigger)TriggerBuilder.Create()
 
    .WithIdentity("trigger3", "group1")
 
    .StartAt(new DateTime(2017, 7, 12, 15, 30, 0))
 
    .ForJob("job1", "group1")
 
.Build();

 

该任务会在2017-07-12 15:30:00被执行。

 

在某个时间点触发触发任务,并在之后每10分钟继续触发一次#

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
ISimpleTrigger trigger4 = (ISimpleTrigger)TriggerBuilder.Create()
 
    .WithIdentity("trigger4", "group1")
 
    .StartAt(new DateTime(2017, 7, 12, 15, 30, 0))
 
    .WithSimpleSchedule(x =>
 
    {
 
        x.WithIntervalInMinutes(10);
 
        x.RepeatForever();
 
    })
 
    .ForJob("job1", "group1")
 
.Build();

 

该任务会在2017-07-12 15:30:00被执行,然后每10分钟运行一次,永不停止。

 

在某个时间点开始触发任务,并在之后每10分钟继续触发一次,触发10次#

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
ISimpleTrigger trigger5 = (ISimpleTrigger)TriggerBuilder.Create()
 
    .WithIdentity("trigger5", "group1")
 
    .StartAt(new DateTime(2017, 7, 12, 15, 30, 0))
 
    .WithSimpleSchedule(x =>
 
    {
 
         x.WithIntervalInMinutes(10);
 
         x.WithRepeatCount(10);
 
    })
 
    .ForJob("job1", "group1")
 
.Build();

 

该任务会在2017-07-12 15:30:00被执行,然后每10分钟运行一次,运行10次。

注:这里需要注意,这个触发器会触发11次,15:30会执行一次,加上后面的10次,一共是11次。

 

在某个时间点开始触发任务,并在之后每10分钟继续触发一次,直到某个时间结束#

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ISimpleTrigger trigger7 = (ISimpleTrigger)TriggerBuilder.Create()
 
.WithIdentity("trigger7", "group1")
 
.StartAt(new DateTime(2017, 7, 12, 15, 30, 0))
 
    .WithSimpleSchedule(x => x
 
        .WithIntervalInMinutes(5)
 
        .RepeatForever())
 
    .EndAt(DateBuilder.DateOf(22, 0, 0))
 
    .Build();

 

该任务会在2017-07-12 15:30:00被执行,然后每10分钟运行一次,直到当天的22:00结束。

 

从当前时间开始,一定时间之后,执行一次任务#

 

1
2
3
4
5
6
7
8
9
ISimpleTrigger trigger6 = (ISimpleTrigger)TriggerBuilder.Create()
 
    .WithIdentity("trigger6", "group1")
 
    .StartAt(DateBuilder.FutureDate(5, IntervalUnit.Minute))
 
    .ForJob("job1", "group1")
 
.Build();

 

该任务会在未来5分钟的时候,运行一次

posted @   LamondLu  阅读(480)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示
主题色彩