Skip to content

Commit cdef30f

Browse files
authored
Merge pull request aspnetboilerplate#5083 from RobertHajbok/quartz-scheduler
Add reschedule/unschedule to Quartz Schedule Job Manager
2 parents 35cb7f6 + b633b89 commit cdef30f

File tree

3 files changed

+55
-4
lines changed

3 files changed

+55
-4
lines changed

src/Abp.Quartz/Quartz/IQuartzScheduleJobManager.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,20 @@ public interface IQuartzScheduleJobManager : IBackgroundWorker
1818
/// <param name="configureTrigger">Job specific trigger options which means calendar or time interval.</param>
1919
/// <returns></returns>
2020
Task ScheduleAsync<TJob>(Action<JobBuilder> configureJob, Action<TriggerBuilder> configureTrigger) where TJob : IJob;
21+
22+
/// <summary>
23+
/// Reschedules a job.
24+
/// </summary>
25+
/// <param name="triggerKey">Key that identifies job's previous trigger.</param>
26+
/// <param name="configureTrigger">Job specific trigger options which means calendar or time interval.</param>
27+
/// <returns></returns>
28+
Task RescheduleAsync(TriggerKey triggerKey, Action<TriggerBuilder> configureTrigger);
29+
30+
/// <summary>
31+
/// Unschedules a job.
32+
/// </summary>
33+
/// <param name="triggerKey">Key that identifies job's trigger.</param>
34+
/// <returns></returns>
35+
Task UnscheduleAsync(TriggerKey triggerKey);
2136
}
2237
}

src/Abp.Quartz/Quartz/QuartzScheduleJobManager.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,20 @@ public async Task ScheduleAsync<TJob>(Action<JobBuilder> configureJob, Action<Tr
3535
await _quartzConfiguration.Scheduler.ScheduleJob(job, trigger);
3636
}
3737

38+
public async Task RescheduleAsync(TriggerKey triggerKey, Action<TriggerBuilder> configureTrigger)
39+
{
40+
var triggerToBuild = TriggerBuilder.Create();
41+
configureTrigger(triggerToBuild);
42+
var trigger = triggerToBuild.Build();
43+
44+
await _quartzConfiguration.Scheduler.RescheduleJob(triggerKey, trigger);
45+
}
46+
47+
public async Task UnscheduleAsync(TriggerKey triggerKey)
48+
{
49+
await _quartzConfiguration.Scheduler.UnscheduleJob(triggerKey);
50+
}
51+
3852
public override void Start()
3953
{
4054
base.Start();

test/Abp.Quartz.Tests/QuartzTests.cs

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System;
2-
using System.Threading;
32
using System.Threading.Tasks;
43
using Abp.Dependency;
54
using Abp.Quartz.Configuration;
@@ -33,7 +32,7 @@ await _quartzScheduleJobManager.ScheduleAsync<HelloJob>(
3332
{
3433
trigger.WithIdentity("HelloJobTrigger")
3534
.WithDescription("HelloJobTriggerDescription")
36-
.WithSimpleSchedule(schedule => schedule.WithRepeatCount(5).WithInterval(TimeSpan.FromSeconds(1)))
35+
.WithSimpleSchedule(schedule => schedule.WithRepeatCount(50).WithInterval(TimeSpan.FromSeconds(1)))
3736
.StartNow();
3837
});
3938

@@ -47,11 +46,27 @@ await _quartzScheduleJobManager.ScheduleAsync<GoodByeJob>(
4746
{
4847
trigger.WithIdentity("GoodByeJobTrigger")
4948
.WithDescription("GoodByeJobTriggerDescription")
50-
.WithSimpleSchedule(schedule => schedule.WithRepeatCount(5).WithInterval(TimeSpan.FromSeconds(1)))
49+
.WithSimpleSchedule(schedule => schedule.WithRepeatCount(50).WithInterval(TimeSpan.FromSeconds(1)))
5150
.StartNow();
5251
});
5352
}
5453

54+
private async Task RescheduleJob()
55+
{
56+
await _quartzScheduleJobManager.RescheduleAsync(new TriggerKey("HelloJobTrigger"),
57+
trigger =>
58+
{
59+
trigger.WithIdentity("HelloJobRescheduleTrigger")
60+
.WithSimpleSchedule(schedule => schedule.WithRepeatCount(50).WithInterval(TimeSpan.FromSeconds(1)))
61+
.StartNow();
62+
});
63+
}
64+
65+
private async Task UnscheduleJob()
66+
{
67+
await _quartzScheduleJobManager.UnscheduleAsync(new TriggerKey("GoodByeJobTrigger"));
68+
}
69+
5570
[Fact]
5671
public async Task QuartzScheduler_Jobs_ShouldBe_Registered_And_Executed_With_SingletonDependency()
5772
{
@@ -71,6 +86,13 @@ public async Task QuartzScheduler_Jobs_ShouldBe_Registered_And_Executed_With_Sin
7186

7287
helloDependency.ExecutionCount.ShouldBeGreaterThan(0);
7388
goodByeDependency.ExecutionCount.ShouldBeGreaterThan(0);
89+
90+
await RescheduleJob();
91+
(await _abpQuartzConfiguration.Scheduler.CheckExists(new TriggerKey("HelloJobTrigger"))).ShouldBe(false);
92+
(await _abpQuartzConfiguration.Scheduler.CheckExists(new TriggerKey("HelloJobRescheduleTrigger"))).ShouldBe(true);
93+
94+
await UnscheduleJob();
95+
(await _abpQuartzConfiguration.Scheduler.CheckExists(new TriggerKey("GoodByeJobTrigger"))).ShouldBe(false);
7496
}
7597
}
7698

@@ -101,7 +123,7 @@ public GoodByeJob(IGoodByeDependency goodByeDependency)
101123
{
102124
_goodByeDependency = goodByeDependency;
103125
}
104-
126+
105127
public override Task Execute(IJobExecutionContext context)
106128
{
107129
_goodByeDependency.ExecutionCount++;

0 commit comments

Comments
 (0)