.net core中Quartz的使用方法

本文介绍了如何在C#中利用Quartz.NET库创建定时任务,包括配置JobSchedule、QuartzFactory和QuartzHostedService,以及在Startup.cs中的服务注册,帮助开发者实现如数据库同步、邮件通知等功能的定时执行。
摘要由CSDN通过智能技术生成

我们在日常开发中,总会遇到这样的需求:每隔一段时间,执行一次某个任务。固定某个时间执行任务,例如凌晨12点对当天的数据进行统计。每个月的第几天,执行某个任务。

Quartz.Net是根据Java的Quartz用C#改写而来,Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等。Quartz.NET允许开发人员根据时间间隔来调度作业。

fcfc0ea208d3bbad261f49d0f1b575ce.png

Quartz版本:3.3.2

1.NuGet中下载安装Quartz

2.新建Quartz帮助类

(1)新建JobSchedule类

public class JobSchedule
    {
        public JobSchedule(Type jobType, string cronExpression)
        {
            JobType = jobType;
            CronExpression = cronExpression;
        }


        public Type JobType { get; }
        public string CronExpression { get; }

新建QuartzFactory类

public class QuartzFactory : IJobFactory
    {
        private readonly IServiceProvider _serviceProvider;


        public QuartzFactory(IServiceProvider serviceProvider)
        {
            _serviceProvider = serviceProvider;
        }


        public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
        {
            return _serviceProvider.GetRequiredService(bundle.JobDetail.JobType) as IJob;
        }


        public void ReturnJob(IJob job)
        { }

新建QuartzService类

public class QuartzHostedService : IHostedService
    {
        private readonly ISchedulerFactory _schedulerFactory;
        private readonly IJobFactory _jobFactory;
        private readonly IEnumerable<JobSchedule> _jobSchedules;


        public QuartzHostedService(
            ISchedulerFactory schedulerFactory,
            IJobFactory jobFactory,
            IEnumerable<JobSchedule> jobSchedules)
        {
            _schedulerFactory = schedulerFactory;
            _jobSchedules = jobSchedules;
            _jobFactory = jobFactory;
        }


        public IScheduler Scheduler { get; set; }


        public async Task StartAsync(CancellationToken cancellationToken)
        {
            Scheduler = await _schedulerFactory.GetScheduler(cancellationToken);
            Scheduler.JobFactory = _jobFactory;


            foreach (var jobSchedule in _jobSchedules)
            {
                var job = CreateJob(jobSchedule);
                var trigger = CreateTrigger(jobSchedule);


                await Scheduler.ScheduleJob(job, trigger, cancellationToken);
            }


            await Scheduler.Start(cancellationToken);
        }


        public async Task StopAsync(CancellationToken cancellationToken)
        {
            await Scheduler?.Shutdown(cancellationToken);
        }


        private static IJobDetail CreateJob(JobSchedule schedule)
        {
            var jobType = schedule.JobType;
            return JobBuilder
                .Create(jobType)
                .WithIdentity(jobType.FullName)
                .WithDescription(jobType.Name)
                .Build();
        }


        private static ITrigger CreateTrigger(JobSchedule schedule)
        {
            return TriggerBuilder
                .Create()
                .WithIdentity($"{schedule.JobType.FullName}.trigger")
                .WithCronSchedule(schedule.CronExpression)
                .WithDescription(schedule.CronExpression)
                .Build();
        }
    }

在Startup.cs中注册代码

services.AddControllers();


            #region Quartz Service


            // Add Quartz services
            services.AddSingleton<IJobFactory, QuartzFactory>();
            services.AddSingleton<ISchedulerFactory, StdSchedulerFactory>();
            // Add our job
            services.AddTransient<DeleteFileJob>();
            services.AddJob();
            services.AddHostedService<QuartzHostedService>();

Quartz.Net源码:

https://github.com/quartznet/quartznet

官方学习文档:

http://www.quartz-scheduler.net/documentation/index.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值