.net core中Quartz的使用方法
 更新时间:2019年03月09日 10:57:00   作者:♀影☆响  

这篇文章主要介绍了.net core中Quartz的使用方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

原来工作中有用到定时任务Quartz,不过是在MVC项目中,现在net core项目中也要用到,就开始改版。中间发现在网上的教程只有执行定时计划的过程,却很少有人写注册的过程,觉得有点略坑。所以写此文章一是自己做个记录,二是希望能帮助到其他人。后面还把此功能做出了多任务定时执行,网上关于net core的教程更是少了,花费了不少时间实现了出来。
Quartz版本:3.0.7
1.NuGet中下载安装Quartz
2.新建Quartz帮助类
(1)新建QuartzJob类,代码如下:

public class QuartzJob : IJob
{
public async Task Execute(IJobExecutionContext context)
{
var jobKey = context.JobDetail.Key;//获取job信息
var triggerKey = context.Trigger.Key;//获取trigger信息

LogHelper.Info($”{DateTime.Now} QuartzJob:==>>自动执行.{jobKey.Name}|{triggerKey.Name}”);
await Task.CompletedTask;
}
}

ps: 上面代码中的jobKey和triggerKey可获取到自己定义的job和trigger的信息,这样做多任务时可区分要执行的是哪个任务. 另LogHelper.Info是自己封装好的日子记录类,可替换为自己的日志类
(2)新建QuartzFactory类,代码如下:

public class QuartzFactory : IJobFactory
{
private readonly IServiceProvider _serviceProvider;

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

public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
{
var jobDetail = bundle.JobDetail;

var job = (IJob)_serviceProvider.GetService(jobDetail.JobType);
return job;
}

public void ReturnJob(IJob job)
{
}
}

(3)新建QuartzService类,代码如下:

#region 单任务
public static void StartJob<TJob>() where TJob : IJob
{
var scheduler = new StdSchedulerFactory().GetScheduler().Result;

var job = JobBuilder.Create<TJob>()
.WithIdentity(“job”)
.Build();

var trigger1 = TriggerBuilder.Create()
.WithIdentity(“job.trigger”)
.StartNow()
.WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromSeconds(5)).RepeatForever())
.ForJob(job)
.Build();

scheduler.AddJob(job, true);
scheduler.ScheduleJob(job, trigger1);
scheduler.Start();
}
#endregion

#region 多任务
public static void StartJobs<TJob>() where TJob : IJob
{
var scheduler = new StdSchedulerFactory().GetScheduler().Result;

var job = JobBuilder.Create<TJob>()
.WithIdentity(“jobs”)
.Build();

var trigger1 = TriggerBuilder.Create()
.WithIdentity(“job.trigger1”)
.StartNow()
.WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromSeconds(5)).RepeatForever())
.ForJob(job)
.Build();

var trigger2 = TriggerBuilder.Create()
.WithIdentity(“job.trigger2”)
.StartNow()
.WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromSeconds(11)).RepeatForever())
.ForJob(job)
.Build();

var dictionary = new Dictionary<IJobDetail, IReadOnlyCollection<ITrigger>>
{
{job, new HashSet<ITrigger> {trigger1, trigger2}}
};
scheduler.ScheduleJobs(dictionary, true);
scheduler.Start();
}
#endregion

#region 配置
public static void AddQuartz(this IServiceCollection services, params Type[] jobs)
{
services.AddSingleton<IJobFactory, QuartzFactory>();
services.Add(jobs.Select(jobType => new ServiceDescriptor(jobType, jobType, ServiceLifetime.Singleton)));

services.AddSingleton(provider =>
{
var schedulerFactory = new StdSchedulerFactory();
var scheduler = schedulerFactory.GetScheduler().Result;
scheduler.JobFactory = provider.GetService<IJobFactory>();
scheduler.Start();
return scheduler;
});
}
#endregion

3.在Startup.cs中注册代码

public void ConfigureServices(IServiceCollection services)
{
services.AddQuartz(typeof(QuartzJob));

//……..
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
QuartzService.StartJobs<QuartzJob>();
//……..
}

 ps: 因AddQuartz方法定义的是Type[]类型,所以可传多个执行类,如:services.AddQuartz(typeof(QuartzJob1), typeof(QuartzJob2)); 不过这样做StartJob()方法就得另处理下,这里就略过
OK,大功告成,这个东西折腾了两天终于尘埃落定了,执行结果如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持华域联盟。

您可能感兴趣的文章:springboot+quartz以持久化的方式实现定时任务的代码Springboot整合quartz产生错误及解决方案SpringBoot集成Quartz实现定时任务的方法浅谈SpringBoot集成Quartz动态定时任务详解.NET Core使用Quartz执行调度任务进阶SpringBoot与Quartz集成实现分布式定时任务集群的代码实例springboot Quartz动态修改cron表达式的方法Springboot整个Quartz实现动态定时任务的示例代码Quartz.Net实现原理及使用方法详解

.net
core
Quartz

相关文章
.NET Core 实现微信小程序支付功能(统一下单)最近公司研发了几个电商小程序,还有一个核心的电商直播,只要是电商一般都会涉及到交易信息,离不开支付系统,这里我们统一实现小程序的支付流程。感兴趣的朋友跟随小编一起看看吧 2019-09-09
.net如何使用Cache框架给程序添加Cache这篇文章主要为大家详细介绍了使用.net的Cache框架快速实现Cache操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2017-07-07
.NET 单点登录解决方案这里指的单点,泛指在WEB服务端,一个账户同一时刻只能存在一个票据!怎么使同一个用户,在同一时间内只允许登录一次,下面将为大家详细介绍下 2013-10-10
用扩展方法优化多条件查询(不定条件查询)在我们开发过程中,特别是管理系统的开发,经常会遇到多条件查询(或者叫不定条件查询)的案例,就是提供给User输入的查询条件有多个不同的查询栏位,而且,在实际使用中并不能确定User会使用哪些条件来当做搜索条件 2012-12-12
详解ASP.NET Core WebApi 返回统一格式参数这篇文章主要介绍了详解ASP.NET Core WebApi 返回统一格式参数,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 2018-11-11
概述.net开发过程中Bin目录下面几种文件格式本篇文章主要对项目发布的时候,经常用到的几个文件:.pdb、.xsd、.vshost.exe、.exe、.exe.config、.vshost.exe.config的作用进行介绍,具有一定的参考价值,需要的朋友可以看下 2016-12-12
ASP.net(c#)生成条形码 code39条码生成方法这几天一直在弄128条码的事情,找了相关的资料,也没找到。后来没办法只能改成code39的条码,需要的朋友可以参考下 2012-11-11
AspNetPager控件的最基本用法AspNetPager控件是一个基于.net的第三方免费开源控件,具有开发高效、使用方便、功能完整等优点 2012-01-01
.NET中TextBox控件设置ReadOnly=true后台取不到值三种解决方法当TextBox设置了ReadOnly=true后要是在前台为控件添加了值,后台是取不到的,值为空,多么郁闷的一个问题经过尝试,发现可以通过如下的方式解决这个问题.感兴趣的朋友可以了解下 2013-02-02
ASP.NET MVC中使用log4net的实现示例这篇文章主要介绍了ASP.NET MVC中使用log4net的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 2020-01-01

最新评论

声明:本站(华域联盟www.cnhackhy.com)所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。