|
|
@ -0,0 +1,193 @@
|
|
|
|
|
|
|
|
using System;
|
|
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
|
|
using System.Threading;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
using Quartz;
|
|
|
|
|
|
|
|
using Quartz.Core;
|
|
|
|
|
|
|
|
using Quartz.Listener;
|
|
|
|
|
|
|
|
using Quartz.Impl;
|
|
|
|
|
|
|
|
using Quartz.Impl.Matchers;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace TopshelfStudy.NetCoreDemo
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
|
|
/// Quarzt调度监听器
|
|
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
|
|
public class CustomSchedulerListener : ISchedulerListener
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
private IScheduler _scheduler;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public CustomSchedulerListener(IScheduler scheduler)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
_scheduler = scheduler;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public Task JobAdded(IJobDetail jobDetail, CancellationToken cancellationToken = default(CancellationToken))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
Console.WriteLine($"{jobDetail.Key} 作业:被添加,成功启用");
|
|
|
|
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
|
|
/// 作业被删除
|
|
|
|
|
|
|
|
/// 删除前一次,删除后一次
|
|
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
|
|
public Task JobDeleted(JobKey jobKey, CancellationToken cancellationToken = default(CancellationToken))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (_scheduler.CheckExists(jobKey).Result)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
Console.WriteLine($"{jobKey} 作业:即将删除");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
Console.WriteLine($"{jobKey} 作业:完成删除");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
|
|
/// 作业被中断
|
|
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
|
|
public Task JobInterrupted(JobKey jobKey, CancellationToken cancellationToken = default(CancellationToken))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
Console.WriteLine($"{jobKey} 作业:被中断");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
|
|
/// 作业被暂停
|
|
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
|
|
public Task JobPaused(JobKey jobKey, CancellationToken cancellationToken = default(CancellationToken))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
Console.WriteLine($"{jobKey} 作业:被暂停");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
|
|
/// 作业被继续(取消暂停)
|
|
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
|
|
public Task JobResumed(JobKey jobKey, CancellationToken cancellationToken = default(CancellationToken))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
Console.WriteLine($"{jobKey} 作业:被继续");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
|
|
/// 作业被添加到Scheduler
|
|
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
|
|
public Task JobScheduled(ITrigger trigger, CancellationToken cancellationToken = default(CancellationToken))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
Console.WriteLine($"{trigger.Key} 触发器:添加到 调度器");
|
|
|
|
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
|
|
/// 当一组Quartz.IJobDetails被暂停时由Quartz.IScheduler调用。
|
|
|
|
|
|
|
|
/// 如果所有组都已暂停,则jobName参数将为空。
|
|
|
|
|
|
|
|
/// 如果所有作业都已暂停,则两个参数都将为空。
|
|
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
|
|
/// <param name="jobGroup"></param>
|
|
|
|
|
|
|
|
/// <param name="cancellationToken"></param>
|
|
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
|
|
public Task JobsPaused(string jobGroup, CancellationToken cancellationToken = default(CancellationToken))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
var jobKeys = _scheduler.GetJobKeys(GroupMatcher<JobKey>.GroupEquals(jobGroup)).Result;
|
|
|
|
|
|
|
|
foreach (var jobKey in jobKeys)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
Console.WriteLine($"{jobGroup} 作业组:被暂停");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public Task JobsResumed(string jobGroup, CancellationToken cancellationToken = default(CancellationToken))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
var jobKeys = _scheduler.GetJobKeys(GroupMatcher<JobKey>.GroupEquals(jobGroup)).Result;
|
|
|
|
|
|
|
|
Console.WriteLine($"{jobGroup} 作业组:被继续");
|
|
|
|
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
|
|
/// 作业从Scheduler中删除
|
|
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
|
|
public Task JobUnscheduled(TriggerKey triggerKey, CancellationToken cancellationToken = default(CancellationToken))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
Console.WriteLine($"{triggerKey.Name} 触发器:Unscheduled");
|
|
|
|
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public Task SchedulerError(string msg, SchedulerException cause, CancellationToken cancellationToken = default(CancellationToken))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
Console.WriteLine($"Scheduler出现错误:{msg}");
|
|
|
|
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public Task SchedulerInStandbyMode(CancellationToken cancellationToken = default(CancellationToken))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public Task SchedulerShutdown(CancellationToken cancellationToken = default(CancellationToken))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public Task SchedulerShuttingdown(CancellationToken cancellationToken = default(CancellationToken))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public Task SchedulerStarted(CancellationToken cancellationToken = default(CancellationToken))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public Task SchedulerStarting(CancellationToken cancellationToken = default(CancellationToken))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public Task SchedulingDataCleared(CancellationToken cancellationToken = default(CancellationToken))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public Task TriggerFinalized(ITrigger trigger, CancellationToken cancellationToken = default(CancellationToken))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
Console.WriteLine($"{trigger.Key.Name}:TriggerFinalized");
|
|
|
|
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public Task TriggerPaused(TriggerKey triggerKey, CancellationToken cancellationToken = default(CancellationToken))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
Console.WriteLine($"{triggerKey.Name}:TriggerPaused");
|
|
|
|
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public Task TriggerResumed(TriggerKey triggerKey, CancellationToken cancellationToken = default(CancellationToken))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
Console.WriteLine($"{triggerKey.Name}:TriggerResumed");
|
|
|
|
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public Task TriggersPaused(string triggerGroup, CancellationToken cancellationToken = default(CancellationToken))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
Console.WriteLine($"{triggerGroup}:TriggersPaused");
|
|
|
|
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public Task TriggersResumed(string triggerGroup, CancellationToken cancellationToken = default(CancellationToken))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
Console.WriteLine($"{triggerGroup}:TriggersResumed");
|
|
|
|
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|