You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

JobsService.cs 1.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using Microsoft.Extensions.Hosting;
  2. using Quartz;
  3. using Quartz.Spi;
  4. using System.Threading;
  5. using System.Threading.Tasks;
  6. namespace MVCTemplate.Quartz
  7. {
  8. public class JobsService: IHostedService
  9. {
  10. private readonly ISchedulerFactory schedulerFactory;
  11. private readonly IJobFactory jobFactory;
  12. private readonly JobMetadata jobMetadata;
  13. public JobsService(ISchedulerFactory
  14. schedulerFactory,
  15. JobMetadata jobMetadata,
  16. IJobFactory jobFactory)
  17. {
  18. this.schedulerFactory = schedulerFactory;
  19. this.jobMetadata = jobMetadata;
  20. this.jobFactory = jobFactory;
  21. }
  22. public IScheduler Scheduler { get; set; }
  23. public async Task StartAsync(CancellationToken cancellationToken)
  24. {
  25. Scheduler = await schedulerFactory.GetScheduler();
  26. Scheduler.JobFactory = jobFactory;
  27. var job = CreateJob(jobMetadata);
  28. var trigger = CreateTrigger(jobMetadata);
  29. await Scheduler.ScheduleJob(job, trigger, cancellationToken);
  30. await Scheduler.Start(cancellationToken);
  31. }
  32. public async Task StopAsync(CancellationToken cancellationToken)
  33. {
  34. await Scheduler?.Shutdown(cancellationToken);
  35. }
  36. private ITrigger CreateTrigger(JobMetadata jobMetadata)
  37. {
  38. return TriggerBuilder.Create()
  39. .WithIdentity(jobMetadata.JobId.ToString())
  40. .WithCronSchedule(jobMetadata.CronExpression)
  41. .WithDescription($"{jobMetadata.JobName}")
  42. .Build();
  43. }
  44. private IJobDetail CreateJob(JobMetadata jobMetadata)
  45. {
  46. return JobBuilder
  47. .Create(jobMetadata.JobType)
  48. .WithIdentity(jobMetadata.JobId.ToString())
  49. .WithDescription($"{jobMetadata.JobName}")
  50. .Build();
  51. }
  52. }
  53. }