JobManage.cs 2.4 KB

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