QuartzUtil.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. using Microsoft.Extensions.DependencyInjection;
  2. using Quartz;
  3. using Quartz.Impl;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Threading.Tasks;
  8. namespace wispro.sp.api.Job
  9. {
  10. public class QuartzUtil
  11. {
  12. private static ISchedulerFactory _schedulerFactory;
  13. private static IScheduler _scheduler;
  14. /// <summary>
  15. /// 添加任务
  16. /// </summary>
  17. /// <param name="type">类</param>
  18. /// <param name="jobKey">键</param>
  19. /// <param name="trigger">触发器</param>
  20. public static async Task Add(Type type, JobKey jobKey, ITrigger trigger = null)
  21. {
  22. await Init();
  23. //_scheduler = await _schedulerFactory.GetScheduler();
  24. //await _scheduler.Start();
  25. if (trigger == null)
  26. {
  27. trigger = TriggerBuilder.Create()
  28. .WithIdentity("april.trigger")
  29. .WithDescription("default")
  30. .WithSimpleSchedule(x => x.WithMisfireHandlingInstructionFireNow().WithRepeatCount(-1))
  31. .Build();
  32. }
  33. var job = JobBuilder.Create(type)
  34. .WithIdentity(jobKey)
  35. .Build();
  36. await _scheduler.ScheduleJob(job, trigger);
  37. }
  38. public static async Task AddMailJob(string Subject,string Body,string To)
  39. {
  40. await Init();
  41. var trigger = TriggerBuilder.Create()
  42. .WithDescription("发送邮件通知")
  43. .WithSimpleSchedule(x => x.WithIntervalInSeconds(5).WithRepeatCount(0))
  44. .Build();
  45. var job = JobBuilder.Create(typeof(MailJob))
  46. .WithIdentity("邮件任务")
  47. .Build();
  48. job.JobDataMap.Put("Subject",Subject);
  49. job.JobDataMap.Put("Body", Body);
  50. job.JobDataMap.Put("To", To);
  51. await _scheduler.ScheduleJob(job, trigger);
  52. }
  53. /// <summary>
  54. /// 恢复任务
  55. /// </summary>
  56. /// <param name="jobKey">键</param>
  57. public static async Task Resume(JobKey jobKey)
  58. {
  59. Init();
  60. _scheduler = await _schedulerFactory.GetScheduler();
  61. //LogUtil.Debug($"恢复任务{jobKey.Group},{jobKey.Name}");
  62. await _scheduler.ResumeJob(jobKey);
  63. }
  64. /// <summary>
  65. /// 停止任务
  66. /// </summary>
  67. /// <param name="jobKey">键</param>
  68. public static async Task Stop(JobKey jobKey)
  69. {
  70. Init();
  71. _scheduler = await _schedulerFactory.GetScheduler();
  72. //LogUtil.Debug($"暂停任务{jobKey.Group},{jobKey.Name}");
  73. await _scheduler.PauseJob(jobKey);
  74. }
  75. /// <summary>
  76. /// 初始化
  77. /// </summary>
  78. private static async Task Init()
  79. {
  80. if (_scheduler == null)
  81. {
  82. _schedulerFactory = new StdSchedulerFactory();// ServiceLocator.Services.GetService<ISchedulerFactory>();
  83. _scheduler = await _schedulerFactory.GetScheduler();
  84. await _scheduler.Start();
  85. }
  86. }
  87. }
  88. }