QuartzUtil.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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. if (trigger == null)
  24. {
  25. trigger = TriggerBuilder.Create()
  26. .WithDescription("default")
  27. .WithSimpleSchedule(x => x.WithMisfireHandlingInstructionFireNow().WithRepeatCount(-1))
  28. .Build();
  29. }
  30. var job = JobBuilder.Create(type)
  31. .WithIdentity(jobKey)
  32. .Build();
  33. await _scheduler.ScheduleJob(job, trigger);
  34. }
  35. public static async Task Add(IJobDetail job, ITrigger trigger = null)
  36. {
  37. await Init();
  38. if (trigger == null)
  39. {
  40. trigger = TriggerBuilder.Create()
  41. .WithDescription("default")
  42. .WithSimpleSchedule(x => x.WithMisfireHandlingInstructionFireNow().WithRepeatCount(-1))
  43. .Build();
  44. }
  45. await _scheduler.ScheduleJob(job, trigger);
  46. }
  47. public static async Task AddMailJob(string Subject,string Body,string toName,string To)
  48. {
  49. await Init();
  50. var trigger = TriggerBuilder.Create()
  51. .WithDescription("发送邮件通知")
  52. .WithSimpleSchedule(x => x.WithIntervalInSeconds(5).WithRepeatCount(0))
  53. .Build();
  54. var job = JobBuilder.Create(typeof(MailJob))
  55. .Build();
  56. job.JobDataMap.Put("Subject",Subject);
  57. job.JobDataMap.Put("Body", Body);
  58. job.JobDataMap.Put("To", To);
  59. job.JobDataMap.Put("Reciever", toName);
  60. await _scheduler.ScheduleJob(job, trigger);
  61. }
  62. /// <summary>
  63. /// 恢复任务
  64. /// </summary>
  65. /// <param name="jobKey">键</param>
  66. public static async Task Resume(JobKey jobKey)
  67. {
  68. Init();
  69. _scheduler = await _schedulerFactory.GetScheduler();
  70. //LogUtil.Debug($"恢复任务{jobKey.Group},{jobKey.Name}");
  71. await _scheduler.ResumeJob(jobKey);
  72. }
  73. /// <summary>
  74. /// 停止任务
  75. /// </summary>
  76. /// <param name="jobKey">键</param>
  77. public static async Task Stop(JobKey jobKey)
  78. {
  79. Init();
  80. _scheduler = await _schedulerFactory.GetScheduler();
  81. //LogUtil.Debug($"暂停任务{jobKey.Group},{jobKey.Name}");
  82. await _scheduler.PauseJob(jobKey);
  83. }
  84. /// <summary>
  85. /// 初始化
  86. /// </summary>
  87. private static async Task Init()
  88. {
  89. if (_scheduler == null)
  90. {
  91. _schedulerFactory = new StdSchedulerFactory();// ServiceLocator.Services.GetService<ISchedulerFactory>();
  92. _scheduler = await _schedulerFactory.GetScheduler();
  93. await _scheduler.Start();
  94. }
  95. }
  96. }
  97. }