private static ITrigger CreateTrigger(JobSchedule schedule) { return(TriggerBuilder .Create() .WithIdentity($"{schedule.JobType.FullName}.trigger", schedule.Group) .WithCronSchedule(schedule.CronExpression) .WithDescription(schedule.CronExpression) .Build()); }
private static IJobDetail CreateJob(JobSchedule schedule, string now = "") { var jobType = schedule.JobType; return(JobBuilder .Create(jobType) .WithIdentity($"{jobType.FullName}{now}", schedule.Group) .WithDescription(jobType.Name) .Build()); }
public static void AddEasyQuartzService(this IServiceCollection services) { services.AddSingleton <IJobFactory, SingletonJobFactory>(); services.AddSingleton <ISchedulerFactory, StdSchedulerFactory>(); #region Add JobSchedule var jobTypes = AppDomain.CurrentDomain.GetAssemblies() .SelectMany(a => a.GetTypes().Where(t => t.GetInterfaces().Contains(typeof(IJob)) && t.IsClass && !t.IsAbstract)) .ToArray(); foreach (var jobType in jobTypes) { services.AddTransient(jobType); var ignore = jobType.GetTypeInfo().IsDefined(typeof(JobIgnoreAttribute), false); var startNow = jobType.GetTypeInfo().IsDefined(typeof(StartNowAttribute), false); if (ignore) { continue; } string cron; if (jobType.BaseType == typeof(EasyQuartzJob)) { var jobService = services.BuildServiceProvider().GetService(jobType); cron = ((EasyQuartzJob)jobService).Cron; } else { var triggerCron = jobType.GetCustomAttributes().OfType <TriggerCronAttribute>().FirstOrDefault(); if (triggerCron == null) { continue; } cron = triggerCron.Cron; } if (string.IsNullOrWhiteSpace(cron)) { continue; } var schedule = new JobSchedule(jobType, cron, $"{jobType.Name}Group", startNow); services.AddSingleton(schedule); } #endregion services.AddHostedService <QuartzHostedService>(); services.AddTransient <IJobManager, JobManager>(); }