JobManage.cs 2.4 KB

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