您当前的位置:首页 > .Net家族

.Net5使用Quartz定时任务

作者:无涯 时间:2022-03-17 10:30:53 阅读数:691 人阅读

 以前项目中的定时任务是自己手动写的,今天写了个小东,需要用到定时任务。就想着看看有没有开源的,一搜还真多。选了一个推荐多的——Quartz。Quartz不仅可以单机部署,还可以配置集群。今天就先体验了一下,配置还是真简单。

第一步:引入Quartz.AspNetCore

        在创建的.net5项目的依赖项中,添加Nuget包,这里要找到Quartz.AspNetCore的包进行安装

引入Quartz.AspNetCore

第二步:创建调度任务

        创建一个实现类,继承IJob接口,在接口的Execute的实现方法中写入我们的任务函数即可。这里和在.net framework中的区别就是Execute的函数返回的是一个Task。

using Quartz;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
 
 
namespace Lkb.Utils.Quartz
{
    public class JobPickInfo: IJob
    {
        public Task Execute(IJobExecutionContext context)
        {
            return Task.Run(() =>
            {
                Console.WriteLine("这是一个任务");                
            });
        }
    }
}
 
 

 

 

第三步:创建任务调度类

using MedicalPlatform.DAL.Log4Net;
using MedicalPlatform.DAL.Znyg;
using Quartz;
using Quartz.Impl;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
 
namespace Lkb.Utils.Quartz
{
    public class QuartzStartUp
    {
        //调度工厂
        private ISchedulerFactory _factory;
        //调度器
        private IScheduler _scheduler;
  
 
        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public async Task<string> Start()
        { 
            //1、声明一个调度工厂
            _factory = new StdSchedulerFactory();
            //2、通过调度工厂获得调度器
             _scheduler = await _factory.GetScheduler();
            //3、开启调度器
            await _scheduler.Start();
            //4、创建任务
            IJobDetail jobpickinfo = JobBuilder.Create<JobPickInfo>().Build();
  
            //5、创建一个触发器 2分钟执行一次
            ITrigger triggerpickinfo = TriggerBuilder.Create()
                            .WithIdentity("JobPickInfo", "PickInfo")
                            .WithSimpleSchedule(x => x.WithIntervalInMinutes(2).RepeatForever()).Build();                
 
 
            //6、将触发器和任务器绑定到调度器中
            await _scheduler.ScheduleJob(jobpickinfo, triggerpickinfo);
            return await Task.FromResult("将触发器和任务器绑定到调度器中完成");
        }
 
 
        public void Stop()
        {
            if(_scheduler != null)
            {
                _scheduler.Clear();
                _scheduler.Shutdown();
            }
            _scheduler = null;
            _factory = null;
        }
    }
}
 
 

创建了QuartzStartUp的任务调度类,在Start()方法中加入了创建任务,触发器及绑定。

第四步:注册Quartz

Quartz的注册需要在startup的类中进行实现:

  • 在ConfigureServices中注入调度类
            #region 注入 Quartz调度类
            services.AddSingleton<QuartzStartUp>();
            //注册ISchedulerFactory的实例。
            services.AddSingleton<ISchedulerFactory, StdSchedulerFactory>();
            #endregion
  • 在Configure中启动Quartz
           #region Quartz任务调度
            //获取前面注入的Quartz调度类         
            var quartz = app.ApplicationServices.GetRequiredService<QuartzStartUp>();
            appLifetime.ApplicationStarted.Register(() =>
            {
                quartz.Start().Wait();
            });
 
 
            appLifetime.ApplicationStopped.Register(() =>
            {
                quartz.Stop();
            });
 
 
            #endregion

        这样Quartz在.net5下就可以正常使用了。

;

本站所有文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。

如果侵犯了你的权益请来信告知我们删除。邮箱:2780053831@qq.com

上一篇:说说

上一篇:说说

四川旅游网为您推荐-飞猪旅游

猜你喜欢