| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- using Microsoft.Extensions.Hosting;
- using Quartz;
- using Quartz.Spi;
- using System.Threading;
- using System.Threading.Tasks;
-
- namespace MVCTemplate.Quartz
- {
- public class JobsService: IHostedService
- {
- private readonly ISchedulerFactory schedulerFactory;
- private readonly IJobFactory jobFactory;
- private readonly JobMetadata jobMetadata;
- public JobsService(ISchedulerFactory
- schedulerFactory,
- JobMetadata jobMetadata,
- IJobFactory jobFactory)
- {
- this.schedulerFactory = schedulerFactory;
- this.jobMetadata = jobMetadata;
- this.jobFactory = jobFactory;
- }
- public IScheduler Scheduler { get; set; }
- public async Task StartAsync(CancellationToken cancellationToken)
- {
- Scheduler = await schedulerFactory.GetScheduler();
- Scheduler.JobFactory = jobFactory;
- var job = CreateJob(jobMetadata);
- var trigger = CreateTrigger(jobMetadata);
- await Scheduler.ScheduleJob(job, trigger, cancellationToken);
- await Scheduler.Start(cancellationToken);
- }
- public async Task StopAsync(CancellationToken cancellationToken)
- {
- await Scheduler?.Shutdown(cancellationToken);
- }
- private ITrigger CreateTrigger(JobMetadata jobMetadata)
- {
- return TriggerBuilder.Create()
- .WithIdentity(jobMetadata.JobId.ToString())
- .WithCronSchedule(jobMetadata.CronExpression)
- .WithDescription($"{jobMetadata.JobName}")
- .Build();
- }
- private IJobDetail CreateJob(JobMetadata jobMetadata)
- {
- return JobBuilder
- .Create(jobMetadata.JobType)
- .WithIdentity(jobMetadata.JobId.ToString())
- .WithDescription($"{jobMetadata.JobName}")
- .Build();
- }
- }
- }
|