JobMange.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using Common;
  2. using JobService.Entity;
  3. using Quartz;
  4. using Quartz.Impl;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Collections.Specialized;
  8. using System.Diagnostics;
  9. using System.Linq;
  10. using System.Reflection;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. namespace JobService
  14. {
  15. public class JobMange
  16. {
  17. private IScheduler _sched = null;
  18. /// <summary>
  19. /// 开始所有作业调度
  20. /// </summary>
  21. public void JobStart()
  22. {
  23. string configFile = AppDomain.CurrentDomain.BaseDirectory + "/config/SyncJobConfig.xml";
  24. List<JobConfig> configs = CommonHelper.ConvertXMLToObject<JobConfig>(configFile, "SCCSettings");
  25. //List<JobConfig> configs = new List<JobConfig>();
  26. var properties = new NameValueCollection
  27. {
  28. ["author"] = "kjh_rec缓存任务调度"
  29. };
  30. ISchedulerFactory sf = new StdSchedulerFactory(properties);
  31. _sched = sf.GetScheduler();
  32. List<Type> allInheirtFromIJob = Assembly.GetExecutingAssembly().GetTypes().Where(t => t.GetInterfaces().Contains(typeof(IJob))).ToList();
  33. foreach (JobConfig config in configs)
  34. {
  35. Type jobType = allInheirtFromIJob.FirstOrDefault(s => s.Name == config.JobName);
  36. if (jobType == null) continue;
  37. IJobDetail job = JobBuilder.Create(jobType)
  38. .WithIdentity(config.JobIdentityName, config.JobGroup)
  39. .Build();
  40. ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
  41. .WithIdentity(config.TriggerIdentityName, config.JobGroup)
  42. .WithCronSchedule(config.CronExpression)
  43. .Build();
  44. foreach (PropertyInfo property in typeof(JobConfig).GetProperties())
  45. {
  46. job.JobDataMap.Put(property.Name, property.GetValue(config, null));
  47. }
  48. DateTimeOffset ft = _sched.ScheduleJob(job, trigger);
  49. Trace.WriteLine(ft.DateTime);
  50. }
  51. _sched.Start();
  52. }
  53. /// <summary>
  54. /// 停止所有作业调度
  55. /// </summary>
  56. public void JobStop()
  57. {
  58. if (_sched != null && _sched.IsStarted)
  59. _sched.Shutdown(true);
  60. }
  61. }
  62. }