QuartzUtil.cs 3.6 KB

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