QuartzUtil.cs 3.2 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 toName,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. job.JobDataMap.Put("Reciever", toName);
  52. await _scheduler.ScheduleJob(job, trigger);
  53. }
  54. /// <summary>
  55. /// 恢复任务
  56. /// </summary>
  57. /// <param name="jobKey">键</param>
  58. public static async Task Resume(JobKey jobKey)
  59. {
  60. Init();
  61. _scheduler = await _schedulerFactory.GetScheduler();
  62. //LogUtil.Debug($"恢复任务{jobKey.Group},{jobKey.Name}");
  63. await _scheduler.ResumeJob(jobKey);
  64. }
  65. /// <summary>
  66. /// 停止任务
  67. /// </summary>
  68. /// <param name="jobKey">键</param>
  69. public static async Task Stop(JobKey jobKey)
  70. {
  71. Init();
  72. _scheduler = await _schedulerFactory.GetScheduler();
  73. //LogUtil.Debug($"暂停任务{jobKey.Group},{jobKey.Name}");
  74. await _scheduler.PauseJob(jobKey);
  75. }
  76. /// <summary>
  77. /// 初始化
  78. /// </summary>
  79. private static async Task Init()
  80. {
  81. if (_scheduler == null)
  82. {
  83. _schedulerFactory = new StdSchedulerFactory();// ServiceLocator.Services.GetService<ISchedulerFactory>();
  84. _scheduler = await _schedulerFactory.GetScheduler();
  85. await _scheduler.Start();
  86. }
  87. }
  88. }
  89. }