摘要
Quartz.NET是一个神奇的开源系统工作智能监控系统,可以适用于各种规模的软件。它拥有许多特点,如数据库查询适用、群集、软件、适用cron-like关系式等,是你的软件监控之选!
正文
一、什么叫Quartz.NET?
Quartz.NET 是一个功能完善的开源系统工作智能监控系统,可用以从最少的应用软件到知名企业系统软件。
Quartz.NET是纯粹的,它是一个.Net程序流程集,是十分时兴的Java工作智能监控系统Quartz的C#完成。
二、Quartz.NET可以做什么?
Quartz.NET许多 特点,如:数据库查询适用,群集,软件,适用cron-like关系式这些,特别适合在平常的工作上,按时轮循数据库同步,按时电子邮件通告,按时解决数据信息等。
Quartz.NET容许开发者依据间隔时间(或天)来生产调度工作。它完成了工作和触发器原理的多对多关联,还可以把好几个工作与不一样的触发器原理关系。
Quartz.NET的应用软件能够器重来源于不一样事情的工作,还能够为一个事情组成好几个工作。
我本次挑选Quartz.Net应用的版本号是 3.3.3
这儿注重一点:3.x的版本号与2.x的版本号应用方法有一定的区别
Quartz.NET官方网文本文档:https://www.quartz-scheduler.net/documentation/quartz-3.x/quick-start.html
三、ASP.NET Core怎么使用Quartz.NET?
- 最先大家必须建立一个ASP.NET Core web的新项目,建立的全过程也不展现了,我建立的是API新项目,应用传统式三层架构。
- 新项目建立好后,大家必须在NuGet包管理工具中安裝Quartz.AspNetCore和Quartz.Extensions.DependencyInjection
- 与2.x的应用方法不一样,由于我应用的版本号是3.3.3(这时最新版)。大家也不像传统式的建立调度系统类。传统式的是界定工作加工厂类【ResetJobFactory】,监测中心类【SchedulerCenter】,及其按时工作中类【RegularWork】(如下图)在这里就但是多详细介绍了。
- 只需建立一个按时工作中类【RegularWork】,而且承继Quartz.net的IJob插口,I_RegularWork_BLL 能引入到RegularWork内必须UseMicrosoftDependencyInjectionJobFactory.
public class RegularWork : IJob {
private readonly I_RegularWork_BLL I_bll; public RegularWork(I_RegularWork_BLL Ibll) { I_bll = Ibll; } public Task Execute(IJobExecutionContext context) { Input_RoomType model = new Input_RoomType(); model.currentPage = 1; model.pageSize = 1; var result = I_bll.getRoomTypeList(model); return Task.Run(() => { using (StreamWriter sw = new StreamWriter(@"F:/Quartz-NET.txt", true, Encoding.UTF8)) { sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff =>") JsonConvert.SerializeObject(result)); } }); } }
- 在Startup.cs的ConfigureServices方式 内根据services去申请注册RegularWork
//Quartz的工作中模块 services.AddTransient<RegularWork>();
- ConfigureServices方式 内增加Quartz调度系统。Quartz.Extensions.DependencyInjection给予与Microsoft 依赖注入的集成化,尽管Quartz 为工作加工厂给予了2个内嵌取代计划方案,能够根据启用UseMicrosoftDependencyInjectionJobFactory或UseMicrosoftDependencyInjectionScopedJobFactory(已弃用)开展配备。
从 Quartz.NET 3.3.2 逐渐,默认设置工作加工厂转化成的全部工作全是修饰符工作,不可再应用UseMicrosoftDependencyInjectionScopedJobFactory。
AddJob-增加一个工作中模块;StartNow表明工作如今就逐渐实行;
WithInterval用以实行時间对策实行标准;
TimeSpan.FromSeconds表明实行的间隔时间,秒为企业;RepeatForever意味着反复工作中,可以用WithRepeatCount(5)替代RepeatForever;WithRepeatCount(5)意味着实行5次
//Quartz调度系统 services.AddQuartz(q => { //用以引入 q.UseMicrosoftDependencyInjectionJobFactory(); // 基本上Quartz生产调度器、工作和触发器原理配备 var jobKey = new JobKey("RegularWork", "regularWorkGroup"); q.AddJob<RegularWork>(jobKey, j => j .WithDescription("My regular work") ); q.AddTrigger(t => t .WithIdentity("Trigger") .ForJob(jobKey) .StartNow() .WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromSeconds(10))//逐渐分秒 10s .RepeatForever())//不断工作中 .WithDescription("My regular work trigger") );
});
- ConfigureServices方式 内增加加上Quartz服务项目
// ASP.NET关键代管-加上Quartz网络服务器 services.AddQuartzServer(options => { // 关掉时,大家期待工作一切正常进行 options.WaitForJobsToComplete = false; });
详细编码以下
//Quartz的工作中模块 services.AddTransient
(); //Quartz调度系统 services.AddQuartz(q => { //用以引入 q.UseMicrosoftDependencyInjectionJobFactory(); // 基本上Quartz生产调度器、工作和触发器原理配备 var jobKey = new JobKey("RegularWork", "regularWorkGroup"); q.AddJob (jobKey, j => j .WithDescription("My regular work") ); q.AddTrigger(t => t .WithIdentity("Trigger") .ForJob(jobKey) .StartNow() .WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromSeconds(10))//逐渐分秒 10s .WithRepeatCount(5))//不断工作中 .WithDescription("My regular work trigger") ); }); // ASP.NET关键代管-加上Quartz服务项目 services.AddQuartzServer(options => { // 关掉时,大家期待工作一切正常进行 options.WaitForJobsToComplete = false; });
-
此刻大家运行新项目,按时工作中逐渐实行。此刻的引入是合理的,查看数据信息后結果打印出在F盘下的Quartz-NET.txt文档内(如下图)。
四、Quartz的cron关系式
官方网的文本文档详细介绍:https://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/crontrigger.html#format
由7段组成:秒 分 时 日 月 礼拜 年(可选)
“-” :表明范畴 MON-WED表明星期一到星期三
“,” :表明例举 MON,WEB表明星期一和星期三
“*” :表有“每”,每月,每日,每星期,每一年等
“/” :表明增加量:0/15(处在分鐘段里边) 每15分钟,在0分之后逐渐,3/20 每二十分钟,从3分钟之后逐渐
“?” :只有发生在日,礼拜段里边,表明不特定实际的值
“L” :只有发生在日,礼拜段里边,是Last的简称,一个月的最后一天,一个星期的最后一天(星期六)
“W” :表明工作中日,间距给出值近期的工作中日
“#” :表明一个月的几个星期几,比如:”6#3″表明每一个月的第三个星期五(1=SUN…6=FRI,7=SAT)
Expression | Meaning |
---|---|
0 0 12 * * ? | 每日下午12点开启 |
0 15 10 ? * * | 每日早上10:15开启 |
0 15 10 * * ? | 每日早上10:15开启 |
0 15 10 * * ? * | 每日早上10:15开启 |
0 15 10 * * ? 2005 | 2005年的每日早上10:15开启 |
0 * 14 * * ? | 在每日中午2点至中午2:59期内的每1分钟开启 |
0 0/5 14 * * ? | 在每日中午2点至中午2:55期内的每五分钟开启 |
0 0/5 14,18 * * ? | 在每日中午2点至2:55期内和中午六点到6:55期内的每五分钟开启 |
0 0-5 14 * * ? | 在每日中午2点至中午2:05期内的每1分钟开启 |
0 10,44 14 ? 3 WED | 每一年三月的星期三的中午2:10和2:44开启 |
0 15 10 ? * MON-FRI | 周一至周五的早上10:15开启 |
0 15 10 15 * ? | 每月15日早上10:15开启 |
0 15 10 L * ? | 每月最后一日的早上10:15开启 |
0 15 10 L-2 * ? | Fire at 10:15am on the 2nd-to-last last day of every month |
0 15 10 ? * 6L | 每月的最后一个星期五早上10:15开启 |
0 15 10 ? * 6L | Fire at 10:15am on the last Friday of every month |
0 15 10 ? * 6L 2002-2005 | 2002年至2005年的每月的最后一个星期五早上10:15开启 |
0 15 10 ? * 6#3 | 每月的第三个星期五早上10:15开启 |
0 0 12 1/5 * ? | Fire at 12pm (noon) every 5 days every month, starting on the first day of the month. |
0 11 11 11 11 ? | Fire every November 11th at 11:11am. |
关注不迷路
扫码下方二维码,关注宇凡盒子公众号,免费获取最新技术内幕!
评论0