using Common;
using JobService.Entity;
using Quartz;
using Quartz.Impl;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace JobService
{
public class JobMange
{
private IScheduler _sched = null;
///
/// 开始所有作业调度
///
public void JobStart()
{
string configFile = AppDomain.CurrentDomain.BaseDirectory + "/config/SyncJobConfig.xml";
List configs = CommonHelper.ConvertXMLToObject(configFile, "SCCSettings");
//List configs = new List();
var properties = new NameValueCollection
{
["author"] = "kjh_rec缓存任务调度"
};
ISchedulerFactory sf = new StdSchedulerFactory(properties);
_sched = sf.GetScheduler();
List allInheirtFromIJob = Assembly.GetExecutingAssembly().GetTypes().Where(t => t.GetInterfaces().Contains(typeof(IJob))).ToList();
foreach (JobConfig config in configs)
{
Type jobType = allInheirtFromIJob.FirstOrDefault(s => s.Name == config.JobName);
if (jobType == null) continue;
IJobDetail job = JobBuilder.Create(jobType)
.WithIdentity(config.JobIdentityName, config.JobGroup)
.Build();
ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
.WithIdentity(config.TriggerIdentityName, config.JobGroup)
.WithCronSchedule(config.CronExpression)
.Build();
foreach (PropertyInfo property in typeof(JobConfig).GetProperties())
{
job.JobDataMap.Put(property.Name, property.GetValue(config, null));
}
DateTimeOffset ft = _sched.ScheduleJob(job, trigger);
Trace.WriteLine(ft.DateTime);
}
_sched.Start();
}
///
/// 停止所有作业调度
///
public void JobStop()
{
if (_sched != null && _sched.IsStarted)
_sched.Shutdown(true);
}
}
}