我们在PostInitialize
的方法WebModule
中安排后台工作,如下所示:
IocManager.Resolve<IQuartzScheduleJobManager>().ScheduleAsync<WorkFlowDetailNotificationWorker>(job =>
{
job.WithIdentity("SendNotificationForRemainGardeshKarDetail", "AutoNotification")
.WithDescription("WorkFlowsNotification");
}, trigger =>
{
trigger.StartNow().WithSchedule(CronScheduleBuilder.CronSchedule("0 0/60 8-19 * * ?")).Build();
});
我们如何在Application Service中获取已注册的后台作业列表,以便我们可以操作它们的属性?
我们的项目启动模板是ASP.NET Boilerplate,AngularJS和EntityFramework。
答案 0 :(得分:0)
您可以在Asp.Net Boilerplate框架中获取注册到Quartz的所有作业的列表,如下所示;
public class MySampleAppService
{
private readonly IAbpQuartzConfiguration _abpQuartzConfiguration;
public MySampleAppService(IAbpQuartzConfiguration abpQuartzConfiguration)
{
_abpQuartzConfiguration = abpQuartzConfiguration
}
private void ListAllJobs()
{
var scheduler = _abpQuartzConfiguration.Scheduler;
var jobGroups = scheduler.GetJobGroupNames();
foreach (string group in jobGroups)
{
var groupMatcher = GroupMatcher<JobKey>.GroupContains(group);
var jobKeys = scheduler.GetJobKeys(groupMatcher);
foreach (var jobKey in jobKeys)
{
var detail = scheduler.GetJobDetail(jobKey);
var triggers = scheduler.GetTriggersOfJob(jobKey);
foreach (ITrigger trigger in triggers)
{
Console.WriteLine(group);
Console.WriteLine(jobKey.Name);
Console.WriteLine(detail.Description);
Console.WriteLine(trigger.Key.Name);
Console.WriteLine(trigger.Key.Group);
Console.WriteLine(trigger.GetType().Name);
Console.WriteLine(scheduler.GetTriggerState(trigger.Key));
var nextFireTime = trigger.GetNextFireTimeUtc();
if (nextFireTime.HasValue)
{
Console.WriteLine(nextFireTime.Value.LocalDateTime.ToString(CultureInfo.InvariantCulture));
}
var previousFireTime = trigger.GetPreviousFireTimeUtc();
if (previousFireTime.HasValue)
{
Console.WriteLine(previousFireTime.Value.LocalDateTime.ToString(CultureInfo.InvariantCulture));
}
}
}
}
}
//...
}