.NET core Quartz 定时任务框架 demo
开始先建个空的web项目。
创建一个新类 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)
{
}
}
QuartzJob
public class QuartzJob : IJob
{
Logger logger = LogManager.GetCurrentClassLogger();
public async Task Execute(IJobExecutionContext context)
{
var jobKey = context.JobDetail.Key;//获取job信息
var triggerKey = context.Trigger.Key;//获取trigger信息 --jobWork1 --jobWork2 logger.Info($"{DateTime.Now} QuartzJob:==>>自动执行\r\n.{jobKey.Name}|{triggerKey.Name}\r\n");
await Task.CompletedTask;
}
}
QuartzService
public static class 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()).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("jobWork1")
.StartNow()
.WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromSeconds()).RepeatForever())
.ForJob(job)
.Build(); var trigger2 = TriggerBuilder.Create()
.WithIdentity("jobWork2")
.StartNow()
.WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromSeconds()).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
}
上面代码中的一段代码解读
var trigger2 = TriggerBuilder.Create()
.WithIdentity("jobWork2")
.StartNow()
.WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromSeconds(11)).RepeatForever())
.ForJob(job)
.Build();
WithIdentity()   
括号里面的字符串到时候会传到QuartzJob类,
我是主要是用这个字符串来判断你所定时执行的某个作业某个任务。
WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromSeconds(11)).RepeatForever())
这里面的 TimeSpan.FromSeconds(11) 是你定时的时间。
也可以定时每天的几点。CronScheduleBuilder.DailyAtHourAndMinute(16, 10)
这就是定时每天的16点10分执行当然你复制完这些类没用的。因为是core项目 还是要注册任务的。
Startup类
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(); //注册mvc服务
services.AddQuartz(typeof(QuartzJob));
} // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
} //使用NLog作为日志记录工具
loggerFactory.AddNLog();
//引入Nlog配置文件
env.ConfigureNLog("Nlog.config"); QuartzService.StartJobs<QuartzJob>(); //多任务 //QuartzService.StartJob<QuartzJob>(); //单任务 app.UseMvc(routes => { //开启mvc
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}"
);
});
}
这样就可以运行了。
因为我写的是demo 用的是日志Nlog。

可以看到是jobWork1和2可以用来区分任务的。
.NET core Quartz 定时任务框架 demo的更多相关文章
- quartz定时任务框架的使用
		
quartz定时任务时间设置 这些星号由左到右按顺序代表 : * * * * * * * ...
 - quartz定时任务框架的使用以及原理
		
quartz定时任务时间设置 这些星号由左到右按顺序代表 : * * * * * * * ...
 - .Net Core 简单定时任务框架封装
		
有段日子没有更新,写点东西冒个泡 .这篇文章过来讲个小东西,也是大家在日常开发中也经常需要面临的问题:后台定时任务处理.估计大家看到这句就已经联想到 QuartZ 等类似第三方类库了,不好意思,后边的 ...
 - quartz定时任务框架调度机制解析
		
转自集群调度机制调研及源码分析 quartz2.2.1集群调度机制调研及源码分析引言quartz集群架构调度器实例化调度过程触发器的获取触发trigger:Job执行过程:总结:附: 引言 qurat ...
 - 集群式Quartz定时任务框架实践
		
在日常开发汇总,经常会遇到需要定时任务的场景,简单的,可以使用Spring的定时任务调度框架,也可以使用Quartz.无论使用哪种,都需要解决一个问题,那就是集群问题.一般情况下,定时任务能且仅能运行 ...
 - Quartz -----定时任务框架
		
一.什么是Quartz 由java开发用来执行定时任务,类似于java.util.Timer. 但是相较于Timer,quartz增加了很多功能: 持久性 ...
 - (2)Spring集成Quartz定时任务框架介绍和Cron表达式详解
		
在JavaEE系统中,我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等.我们可以使用java.util.Timer结合java.util.TimerTask来完成这项工作,但 ...
 - Spring集成Quartz定时任务框架介绍和Cron表达式详解
		
原文地址:http://www.cnblogs.com/obullxl/archive/2011/07/10/spring-quartz-cron-integration.html 在JavaEE系统 ...
 - Spring_Spring集成Quartz定时任务框架介绍和Cron表达式详解
		
在JavaEE系统中,我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等.我们可以使用java.util.Timer结合java.util.TimerTask来完成这项工作,但 ...
 
随机推荐
- 使用gdb调试段错误
			
[https://blog.csdn.net/xj9120/article/details/91380074] 1.bt 2.frame number 3.一般是内存问题 4.kill
 - Django项目纪要
			
开发流程 公司高层 项目立项 | 市场部门 需求分析-->需求分析说明书, 需求规格说明书 | 产品部门 产品原型-->产品 UI 前端 后端 测试 移动端 | |------------ ...
 - leetcode:7. 整数反转
			
题目描述: 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例: 输入: 123 输出: 321 输入: -123 输出: -321 输入: 120 输出: 21 注意:假 ...
 - 网页版查看Android源码地址
			
Android社区 http://www.androidos.net.cn/sourcecode
 - 蓝牙BLE: ATT协议层中属性(Attribute)
			
ATT(Attribute Protocol)属性层是GATT和GAP的基础,它定义了BLE协议栈上层的数据结构和组织方式. 属性(Attribute)概念是ATT层的核心,ATT层定义了属性的内容, ...
 - Java一行代码
			
1.整数格式化成0X 的形式字符串 String hour=String.format("%02d", txtWaringTime.getCurrentHour()); Strin ...
 - 移除 WordPress 自动加载的 jQuery,使用自定义 jQuery 版本
			
WordPress 使用的 jQuery 版本由于需要考虑到很多安全稳定的因素,所以一般不会使用最新版本的 jQuery, 可以通过以下方式移除 WordPress 自定加载的 jQuery,并加载自 ...
 - electron---更改安装图标
			
在用electron开发桌面端的时候,打包成exe文件,需要更改默认的图标: 具体做法: 在根目录新建新建存放icon图标的目录: 需要两个icon:icon.icns,icon.ico 注意: 1. ...
 - ospf的路由更新和撤销总结
			
首先ospf 的报文有:hello报文,主要作用ospf 邻居建立及维护.dd报文,主要作用主从选举,序列号主从的确认,mtu的协商(可选).lsr 报文,主要作用向邻居请求lsa.lsu报文,主要作 ...
 - Thinkphp5 实现动态模板主题多个模板切换
			
在项目开发过程中会遇到一个网站有不同风格,本文详细介绍Thinkphp5 实现模板主题多个模板切换 一.在Config中配置view_path模板路径代码如下 1 2 3 4 5 6 7 8 9 10 ...